Neue Version des Exchange Zertifikatsassistent für Let’s Encrypt

Am 06.02.2017 hatte ich die erste Version des Zertifikatsassistent für Exchange 2016 und Let’s Encrypt veröfferntlicht. Der Zertifikatsassistent vereinfacht das Anfordern, Erneuern und Installieren eines SSL-Zertifikats für Exchange 2016. Nun gibt es Dank Bjoern eine neue Version.

Bjoern hat sich die Mühe gemacht und einige Änderungen vorgenommen, sodass der Zertifikatsassistent auch mit Exchange 2010 und Exchange 2013 funktioniert. Des weiteren ist das mehrmalige Ausführen pro Tag dank Bjoerns Änderungen nun auch möglich. Häufiges Ausführen des Scripts ist allerdings mit etwas Vorsicht zu genießen, hier gibt es Limits von Let’s Encrypt:

https://letsencrypt.org/docs/rate-limits/

Falls das ACMESharp Modul nicht bereits installiert ist, wird nun die Version 0.8.1 durch das Script installiert. Die Version des ACMESharp Moduls ist zwar etwas älter, aber damit funktioniert die HTTP Validierung durch Let’s Encrypt noch.

Nach wie vor gelten ein paar Voraussetzungen für den Assistenten, diese sind hier beschrieben:

https://www.frankysweb.de/exchange-2016-zertifikatsassistent-fuer-lets-encrypt/

  • Der Exchange Server muss unter Port 443 und 80 öffentlich erreichbar sein
  • PowerShell IIS Modul (Webadministration)
  • Exchange Management Shell
  • ACMESharp PowerShell Client (wird installiert, wenn nicht vorhanden)

Neue Version des Exchange Zertifikatsassistent für Let’s Encrypt

Die aktuelle Version des Zertifikatsassistenten kann hier runtergeladen werden:

Durch die geplante Aufgabe wird das Zertifikat 4 Tage vor Ablauf erneuert. Ob das Zertifikat erneuert wurde, sollte also 3 Tage vor Ablauf kontrolliert werden.

Ein komplette Überarbeitung des Scripts habe ich ebenfalls vorgesehen, bin aber leider noch nicht dazu gekommen. Es steht erst einmal ein Update für den Exchange Reporter in den Startlöchern. Verbesserungsvorschläge und Wünsche sind per Mail willkommen.

Vielen Dank an Bjoern!

Update 10.09.17: Edwin van Brenk hat das Script ins Englische übersetzt, vielen Dank dafür! Link siehe unten.

Edwin van Brenk has translated the script to English language. Many thank for your work. You will find the English version here:

Update 26.02.2018: Eine komplett überarbeitete Version findet sich hier (Beta):

Exchange Certificate Assistant: Neue Version

80 Gedanken zu „Neue Version des Exchange Zertifikatsassistent für Let’s Encrypt“

  1. Hallo Frank und Community!

    Ich erweitere gerade unseren Exchange mit einen 2. und einer DAG. Der Assistent läuft auf dem 1. EXG. Nach Erneuerung muß ich manuell das Zertifikat exportieren und importieren. Nun meine Frage:

    Im Script in Zeile 636 erfolgt der Import:
    Import-ExchangeCertificate -FileName $CertPath -FriendlyName $SANAlias -Password $ImportPassword -PrivateKeyExportable:$true | Enable-ExchangeCertificate -Services „SMTP, IMAP, POP, IIS“ –force

    würde das auch funktionieren, wenn ich mittels Parameter -server das ganze 2mal ausführe für jeden Exchange:

    Import-ExchangeCertificate -Server EXG1 -FileName $CertPath -FriendlyName $SANAlias -Password $ImportPassword -PrivateKeyExportable:$true | Enable-ExchangeCertificate -Services „SMTP, IMAP, POP, IIS“ –force
    Import-ExchangeCertificate -Server EXG2 -FileName $CertPath -FriendlyName $SANAlias -Password $ImportPassword -PrivateKeyExportable:$true | Enable-ExchangeCertificate -Services „SMTP, IMAP, POP, IIS“ –force

    oder kommt es dann zu Problemen?

    Antworten
  2. Hallo, habe jetzt schon ne ziemliche Zeit probiert aber bekomme immer die selbe Meldung.

    Hier mal die Log:

    4.07.2020 14:01:09;System;Info;Geting system parameters;
    24.07.2020 14:01:09;System;Info;Certificate Assistant Exchange 2013 Version;
    24.07.2020 14:01:09;System;Info;PowerShell Version: 5.1.14409.1005 OSVersion: 6.3.9600.0;
    24.07.2020 14:01:09;Check Posh-ACME;Info;Check if Module installed;
    24.07.2020 14:01:09;Check Posh-ACME;Warning;Posh-ACME not installed, try to install it;
    24.07.2020 14:01:09;Check Posh-ACME;Info;Using legacy installation method;
    24.07.2020 14:01:09;Check Posh-ACME;Info;Try to download PackageManagement-MSI Path: S:\Exchange2013\poshacme.zip;
    24.07.2020 14:01:45;Check Posh-ACME;Info;Installation successfull;
    24.07.2020 14:01:45;Load Posh-ACME;Info;Posh-ACME is installed, try to load it;
    24.07.2020 14:01:45;Load Posh-ACME;Info;Module Import was successfull, PoshACMEVersion 0.0 0.0;
    24.07.2020 14:01:45;Load Exchange SnapIns;Info;Try to load Exchange SnapIns;
    24.07.2020 14:01:45;Load Exchange SnapIns;Info;Sucessfully loaded Exchange SnapIns;
    24.07.2020 14:01:45;IIS;Info;Trying to create .Well-Known Directory;
    24.07.2020 14:01:45;IIS;Info;Well-Known Folder already exists, skipping;
    24.07.2020 14:01:45;IIS;Warning;Mime Type was not added to Well-Known folder, maybe it was already added;
    24.07.2020 14:01:45;IIS;Info;Changing Let’s Encrypt IIS directory to http;
    24.07.2020 14:01:45;IIS;Info;Successfully changed Let’s Encrypt IIS directory to http;
    24.07.2020 14:01:45;IIS;Info;Checking Let’s Encrypt IIS directory to accept validation by http request;
    24.07.2020 14:01:45;IIS;Info;.well-known directory accepts http;

    die FQDNS werden alle sauber ausgelesen und dann gehts hier weiter:

    24.07.2020 14:01:59;LE System;Info;Setting LE Mode;
    24.07.2020 14:01:59;LE System;Info;Setting LE Mode to PRODUCTION MODE (LIVE SYSTEM);
    24.07.2020 14:01:59;LE System;Info;Checking for existing LE Account;
    24.07.2020 14:01:59;LE System;Info;Found a existing LE Account;
    24.07.2020 14:01:59;LE Certificate;Info;Trying to create a new order for a certificate;
    24.07.2020 14:02:06;LE Certificate;Info;Successfully ordered certificate;
    24.07.2020 14:02:06;LE System;Info;Creating Autorisation files for LE verification;
    24.07.2020 14:02:07;LE System;Info;Asking LE to verify the order;
    24.07.2020 14:02:08;LE System;Info;Successfully informed LE to verify the order;
    24.07.2020 14:02:08;LE System;INFO;Let’s give LE some time to validate (1 min);1 min
    24.07.2020 14:03:08;LE System;INFO;Time to wake up, need coffee!;
    24.07.2020 14:03:08;LE System;INFO;Let’s check the authorization;
    24.07.2020 14:03:08;LE System;INFO;Authorization for autodiscover.werbeagentur-kraeft.de is valid;
    24.07.2020 14:03:08;LE System;INFO;Authorization for mail.werbeagentur-kraeft.de is valid;
    24.07.2020 14:03:08;LE System;INFO;Let’s refresh the order;
    24.07.2020 14:03:08;LE System;INFO;Let’s check if order is ready;
    24.07.2020 14:03:08;LE System;INFO;Order is ready;
    24.07.2020 14:03:08;LE System;INFO;Let’s get the certificate;
    24.07.2020 14:03:09;LE System;ERROR;Getting certificate was not successfull;Der Typ [Org.BouncyCastle.Security.SecureRandom] kann nicht gefunden werden. Stellen Sie sicher, dass die Assembly, die diesen Typ enthält, geladen wird.

    Hab schon einiges probiert aber komme da nicht weiter.

    Antworten
  3. Hallo Frank, et.al.
    weisst du oder einer der Unterstützer / Experten hier ob es seitens Microsoft ein Support-Problem / keinen Support gibt, wenn man let’s encrypt Zertifikate auf einem Exchange Produktivsystem verwendet ?
    Grüße
    Thomas

    Antworten
  4. Guten Tag Zusammen,

    Leider kann ich auch bestätigen, dass es nur noch bei älteren Installation (vor Nov. 2019) klappt,
    bei neueren wird dann jeweils darauf verwiesen, dass ACMEv1 nicht mehr unterstütz wird. Gibt’s
    hier ein Workaround ? Beispielsweise den Account via andrem Tool erstellen (ACMEv2 oder höher) und dann mit dem Script updaten ?

    LG aus der Schweiz

    TheHugi

    Antworten
  5. Ich wollte gerade ein neues Zertifikat beantragen, da wirft das Script, das bisher super funktioniert hat folgendes aus:

    New-ACMERegistration : Account creation on ACMEv1 is disabled. Please upgrade your ACME client to a version that
    supports ACMEv2 / RFC 8555. See https://community.letsencrypt.org/t/end-of-life-plan-for-acmev1/88430 for details.
    CertificateAssistant\CertificateAssistant.ps1:246 Zeichen:21
    + … Registration = New-ACMERegistration -Contacts $contactmail -AcceptTos
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : PermissionDenied: (ACMESharp.Vault.Model.RegistrationInfo:RegistrationInfo) [New-ACMEReg
    istration], AcmeWebException
    + FullyQualifiedErrorId : urn:acme:error:unauthorized (403),ACMESharp.POSH.NewRegistration
    Fehler: Es konnte keine Registrierung bei Let’s Encrypt durchgeführt werden

    Laut Let’s Encryp lassen sie ab November 2019 keine neuen Regsitrationen mehr zu.

    Hat jemand eine Idee für einen Workauround?

    Antworten
  6. Die Wildcard-Zertifikate von LetsEncrypt funktionieren hier tadellos im Exchange 2016 und auch das regelmäßige updaten läuft super. Eine gemeine Fehlermeldung gibt es allerdings in den Server Logs:

    Event 12017: an internal transport certificate will expire soon

    Naturgemäß laufen LetsEncrypt-Zertifikate 90 Tage. Offenbar hardcoded (warum?) warnt Exchange 90 Tage vor Ablauf eines Zertifikates. Die Katze beißt sich in den Schwanz.

    Nun machen rote Fehlermeldungen in den Log immer nervös. Sollten schließlich auch so sein. Googlen brachte mich hier nicht weiter.

    Hat irgendjemand eine Idee zur Lösung dieses ärgerlichen Problems?

    Antworten
  7. Hallo zusammen wir haben jetzt Aktuell ein Problem mit unserem Script. Könnte da jemande helfen?

    PS C:\windows\system32> .\CertificateAssistant.ps1
    .\CertificateAssistant.ps1 : Die Datei
    „C:\windows\system32\CertificateAssistant.ps1“ kann nicht geladen
    werden. Die Datei „C:\windows\system32\CertificateAssistant.ps1“ ist
    nicht digital signiert. Sie können dieses Skript im aktuellen System
    nicht ausführen. Weitere Informationen zum Ausführen von Skripts und
    Festlegen der Ausführungsrichtlinie erhalten Sie unter
    „about_Execution_Policies“
    (https:/go.microsoft.com/fwlink/?LinkID=135170)..
    In Zeile:1 Zeichen:1
    + .\CertificateAssistant.ps1
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : Sicherheitsfehler: (:) [], PSSecurityExcep
    tion
    + FullyQualifiedErrorId : UnauthorizedAccess

    Wie kann ich diesen Fehler beheben?

    Antworten
  8. Hallo Franky,
    Zuerst vielen Dank für deinen tollen, kompetenten Blog, der sicherlich vielen Admins das Leben vereinfacht.
    Ich bin soeben dabei einen Exchange 2010, basierend auf SBS2011, nach O365 zu migrieren. In diesem Zuge möchte ich dort ein Letsencrypt Zertifikat installieren.
    Dein Assistent läuft prima ohne Fehlermeldung durch, bloß die Validierung des Domainnamens schlägt fehl. Es wird der .well-known Verzeichnisbaum sehr wohl angelegt, auch die Validierungsdateien mit Inhalt erscheinen darin. Das Debuggen des Scripts mit der ISE bringt folgende Erkenntnis: beim Submit-ACMEChallenge wird der Status „pending“ zurückgegeben, die Dateien werden erzeugt, nach der 30 sec Wartezeit beim Update-ACME Identifier erscheint der Status „invalid“ und das Script bricht dann natürlich ab.

    Ich denke das liegt nicht am script, aber vielleicht hast du oder jemand anderer eine Idee woran das liegen kann. Beim recherchieren im Netz bin ich bis jetzt auf keine Lösung gestoßen.

    Liebe Grüße,
    Michael

    Antworten
  9. Vielen Dank für das Script!

    Leider wird bei mir das Zertifikat (Wildcard) nicht erneuert, morgen wird es bei mir nämlich auch ablaufen.
    Daher die frage zuerst, läuft das Script auch auf dem Exchange 2019 ?

    Folgt habe ich das Script durchgeführt:

    Dan nach kommt der Fehler :

    Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
    In C:\Users\Mark\Desktop\CertificateAssistant.ps1:93 Zeichen:4
    + [array]$CertNames += ((Get-OutlookAnywhere -Server $ExchangeServer …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    Nachdem kommt der Part mit dem DNS:

    Die DNS Namen wurden korrekt gefunden daher habe ich keine neuen DNS Namen hinzugefügt.

    Nachdem kommt der Part mit der Registrierung:

    Registrierung E-Mail habe ich keine Eingetragen.

    Nachdem kommt der Part mit den Aufgaben für Zertifikat:

    Dort habe ich ihm Anschluss die Automatische Erneuerung bewilligt. Das hat bei Überprüfung bei Aufgabenplanung auch geklappt.

    Leider kommt dann am Schluss folgende Fehlermeldung:

    Konfiguration starten? (Enter für Weiter / STRG+C zum Abbrechen:

    Prüfe ob bereits ein Vault existiert…
    Prüfe Let’s Encrypt Registrierung…
    Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
    In C:\Users\Mark\Desktop\CertificateAssistant.ps1:259 Zeichen:3
    + $CertSubject = ((Get-OutlookAnywhere -Server $ExchangeServer).Exter …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    Neuer Identifier:
    DNS: srvex.weinberg.ch
    Alias: Cert150420191059-1
    Validierung vorbereiten:
    Alias Cert150420191059-1
    Neuer Identifier:
    DNS: remote.weinberg.ch
    Alias: Cert150420191059-2
    Validierung vorbereiten:
    Alias Cert150420191059-2
    Neuer Identifier:
    DNS: srvex.weinberg.local
    Alias: Cert150420191059-3
    New-ACMEIdentifier : Error creating new authz :: Name does not end in a public suffix
    In C:\Users\Mark\Desktop\CertificateAssistant.ps1:270 Zeichen:14
    + $NewID = New-ACMEIdentifier -Dns $ExchangeSAN -Alias $ACMEAlias
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidData: (ACMESharp.Vault.Model.IdentifierInfo:IdentifierInfo) [New-ACMEIdentifier],
    AcmeWebException
    + FullyQualifiedErrorId : urn:acme:error:malformed (400),ACMESharp.POSH.NewIdentifier
    Validierung vorbereiten:
    Alias Cert150420191059-3
    Complete-ACMEChallenge : Unable to find an Identifier for the given reference
    In C:\Users\Mark\Desktop\CertificateAssistant.ps1:273 Zeichen:20
    + … lidateReq = Complete-ACMEChallenge $ACMEAlias -ChallengeType http-01 …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Complete-ACMEChallenge], Exception
    + FullyQualifiedErrorId : System.Exception,ACMESharp.POSH.CompleteChallenge

    Let’s Encrypt IIS Verzeichnis auf HTTP umstellen…
    Umstellung auf HTTP erfolgreich
    DNS Namen durch Let’s Encrypt validieren lassen…
    Validierung durchführen: Cert150420191059-1
    Validierung durchführen: Cert150420191059-2
    Validierung durchführen: Cert150420191059-3
    Submit-ACMEChallenge : Unable to find an Identifier for the given reference
    In C:\Users\Mark\Desktop\CertificateAssistant.ps1:297 Zeichen:17
    + … $Validate = Submit-ACMEChallenge $ACMEAlias -ChallengeType http-01
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Submit-ACMEChallenge], Exception
    + FullyQualifiedErrorId : System.Exception,ACMESharp.POSH.SubmitChallenge

    30 Sekunden warten…
    Prüfe ob die DNS-Namen validiert wurden…
    Update Alias: Cert150420191059-1
    Fehler: Validierung für Alias Cert150420191059-1 fehlgeschlagen

    Leider habe ich nicht viel Erfahrung mit Powershell.
    Wisst Ihr wo hier der Fehler liegt ?

    Freundliche Grüsse
    Mark

    Antworten
    • Die Antwort ist im Log:

      DNS: srvex.weinberg.local
      Alias: Cert150420191059-3
      New-ACMEIdentifier : Error creating new authz :: Name does not end in a public suffix

      eine .local Adresse kann nicht in einem Zertifikat stehen

      Antworten
  10. @Frank.
    Am 10.02.2019 hatte ich mit Deinem Script ein Zertifikat erzeugt das noch bis zum 11.05. gültig ist. Aktuell funktioniert alle noch so wie es soll.

    Bei heutigen erneuten Ausführen des Scriptes CertificateAssistant.ps1 ohne Parameter müsste soweit ich das verstanden habe das Zertifikat erneut mit heutigem Daten ausgestellt und deployed werden. Allerdings hat die Validierung nicht mehr funktioniert.

    Hier die Ausgabe:

    Prüfe ob bereits ein Vault existiert…
    Prüfe Let’s Encrypt Registrierung…
    Neuer Identifier:
    DNS: xxxxxxxxxxxxxxxxxxx
    Alias: Cert130420190613-1
    Validierung vorbereiten:
    Alias Cert130420190613-1
    Let’s Encrypt IIS Verzeichnis auf HTTP umstellen…
    Umstellung auf HTTP erfolgreich
    DNS Namen durch Let’s Encrypt validieren lassen…
    Validierung durchführen: Cert130420190613-1
    30 Sekunden warten…
    Prüfe ob die DNS-Namen validiert wurden…
    Update Alias: Cert130420190613-1
    Fehler: Validierung für Alias Cert130420190613-1 fehlgeschlagen

    Seit dem 10.02. wurde das System – außer durch MS Updates – nicht verändert.

    Am 10.02. hat die Validierung noch funktioniert:

    Prüfe ob bereits ein Vault existiert…
    Prüfe Let’s Encrypt Registrierung…
    Neuer Identifier:
    DNS: xxxxxxxxxxxxxxxxxx
    Alias: Cert100220190651-1
    Validierung vorbereiten:
    Alias Cert100220190651-1
    Let’s Encrypt IIS Verzeichnis auf HTTP umstellen…
    Umstellung auf HTTP erfolgreich
    DNS Namen durch Let’s Encrypt validieren lassen…
    Validierung durchführen: Cert100220190651-1
    30 Sekunden warten…
    Prüfe ob die DNS-Namen validiert wurden…
    Update Alias: Cert100220190651-1
    Validierung OK
    30 Sekunden warten…
    Prüfe das Zertifikat…
    Zertifikat OK
    Exportire das Zertifikat nach C:\Users\xxxxxxxx\AppData\Local\Temp
    Prüfe ob das Zertifikat exportiert wurde…
    Zertifikat wurde erfolgreich exportiert
    Passwort für die PFX Datei: 2686940
    Zertifikat wird Exchange zugewiesen und aktiviert
    Prüfe ob das Zertifikat aktiviert wurde
    Das Zertifikat wurde erfolgreich aktiviert

    Antworten
  11. Hallo,

    ein tolles Script, herzlichen Dank.

    Ich bekomme leider bei meinem Server (Server 2012R2, Exchange 2016) eine Fehlermeldung:

    New-ACMERegistration : Unexpected character encountered while parsing value: <. Path '', line 2, position 1.
    In C:\cert\CertificateAssistant.ps1:246 Zeichen:21
    + … Registration = New-ACMERegistration -Contacts $contactmail -AcceptTos
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [New-ACMERegistration], JsonReaderException
    + FullyQualifiedErrorId : Newtonsoft.Json.JsonReaderException,ACMESharp.POSH.NewRegistration

    Fehler: Es konnte keine Registrierung bei Let's Encrypt durchgeführt werden

    Google-Suche hat nicht weitergeholfen. Hat jemand eine Idee?

    Antworten
  12. Hallo und wieder einmal danke für die äusserst hilfreichen Anleitungen.

    Zu dieser hier habe ich nur die Frage, die sich mir jetzt zum ersten mal stellt:

    Wie kann ich das wieder komplett deaktivieren, weil jetzt ein gekauftes Zertifikat installiert ist?

    Antworten
  13. Nein aber es steht doch da Port 80 und 443 und dann noch die Ports für den E-Mail Eingang port 25. und dann natürlich noch die ports für den mail abruf von außerhalb falls gewünscht

    Antworten
    • Alexj ich denke mal deine Antwort war auf meine Frage bezogen ;-).

      Danke dir für die Antwort.
      Bedeutet also ich kann das Script, bzw (Lets Encrypt) nur nutzen, wenn ich eine Portweiterleitung von 80 und 443 auf den Exchange Server konfigurieren.

      Eigentlich will ich ja mit einem Reverse Proxy genau dies umgehen, damit der Exchange Server nicht direkt über diese Ports im Internet steht.

      Für die Verlängerung von dem Lets Encrypt Zertifikat müssen die Ports ebenfalls erreichbar sein, richtig?
      Bedeutet also ich könnte die Ports nicht nur einmalig öffnen?

      Grüße Phil

      Antworten
  14. Hallo,

    vorerst danke für die super Anleitungen und die Bemühungen.

    Eine kurze Frage beim Einsatz einer Firewall als Reverse Proxy vor dem Exchange Server.
    Kann in diesem Fall das Script auch verwendet werden?

    Müssen in der Firewall bestimmte Ports auf den Exchange Server weitergeleitet werden?
    Da als Voraussetzung steht, dass der Exchange Server per „Port 443 und 80 “ erreichbar sein muss.

    Danke im Voraus
    Grüße Phil

    Antworten
  15. Wir würden auch gerne das Skript einsetzen, aber bei uns hakt das scheinbar aufgrund der Domain-Endungen.
    Die erste Fehlermeldung erscheint bereits beim lesen der Konfiguration:

    Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
    In E:\CertificateAssistant.ps1:108 Zeichen:5
    + [array]$CertNames += ((Get-MapiVirtualDirectory -Server $Exchange …

    Danach läuft das Script erstmal normal weiter, wirft aber bei den DNS-Namen einmal den internen Mail.intern.local und den externen aus Mail.extern.local. Gehen wir dann die Schritte normal weiter, scheitert die Validierung bei Let’s encrypt aufgrund dessen, das er den internal-Namen nicht verarbeiten kann:

    New-ACMEIdentifier : Error creating new authz :: Name does not end in a public suffix

    Die restlichen Fehlermeldungen betreffen dann jeweils disen Validierungsschlüssel.
    Der zweite Validierungsschlüssel scheint aber nicht unabhängig davon ausgeführt zu werden, es passiert nichts mehr weiter und das Script endet mit dem Hinweis das die Validierung fehlgeschlagen ist.

    Was machen wir falsch?

    Antworten
    • Hallo Oliver,
      Frank hat dazu auch ein sehr schönes, aber recht umfangreiches HowTo verfasst, wie das ganze zu konfigurieren ist. Viele Fragen, auch Verständnisfragen, ergeben sich von selbst. Durchlesen, verstehen und anwenden. Im Prinzip nix kompliziertes.
      Wie er schon geschrieben hat, local Adressen können nicht gehen, werden von extern ja nicht aufgelöst. Musst auf public Domains umbauen. Geht auch mit Dyn IP wenn du im DNS der Maildomain Cname Einträge auf Dynamisch DNS verwendest. Arbeite einfach mal das Howto (Whitepaper) durch.

      grüße

      Antworten
  16. Hallo zusammen,

    wir möchten das Skript gerne ebenfalls einsetzen, allerdings wurde uns gesagt, dass eine zwingende Voraussetzung wäre, dass wir über eine feste (statische) IP Adresse verfügen. Benötigen wir eine feste IP, die uns vom DSL-Anbieter zur Verfügung gestellt wird oder muss der Mailserver bei unserem Hoster eine feste IP haben – oder funktioniert es auch mit DynDNS, o.ä.

    Hat hier jemand Erfahrungswerte oder kann uns eine Information dazu geben?

    Vielen Dank bereits im Voraus für jeden Hinweis.

    Antworten
    • Hi Sven!
      Ich habe 2 Test Exchange Server, beide haben keine statische IP.
      Einer steht bei mir zu Hause und bekommt eine dynamische IP von Vodafone. Der Andere läuft in Azure als VM und hat auch keine statische VM.
      Beide Server waren über DynDNS erreichbar.
      Und bei beiden habe ich das Skript erfolgreich genutzt!
      Mir ist auch nicht bekannt dass für Let’s Encrypt eine statische IP notwendig ist.
      Wichtig war nur dass Port 80 und 443 erreichbar waren.
      Viele Grüße
      Carsten

      Antworten
  17. Hallo zusammen,

    ich habe folgendes Problem:

    —————————————————————————
    Alle Informationen sind vorhanden, soll das Zertifikat konfiguriert werden?
    —————————————————————————

    Konfiguration starten? (Enter für Weiter / STRG+C zum Abbrechen:

    Prüfe ob bereits ein Vault existiert…
    Prüfe Let’s Encrypt Registrierung…
    Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
    In C:\o.muc.de\CertificateAssistant.ps1:259 Zeichen:3
    + $CertSubject = ((Get-OutlookAnywhere -Server $ExchangeServer).Exter …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    Neuer Identifier:
    DNS: mcsrv-05-exch.medien-computer.de
    Alias: Cert181220180416-1
    Validierung vorbereiten:
    Alias Cert181220180416-1
    Neuer Identifier:
    DNS: office.medien-computer.de
    Alias: Cert181220180416-2
    Validierung vorbereiten:
    Alias Cert181220180416-2
    Let’s Encrypt IIS Verzeichnis auf HTTP umstellen…
    Umstellung auf HTTP erfolgreich
    DNS Namen durch Let’s Encrypt validieren lassen…
    Validierung durchführen: Cert181220180416-1
    Validierung durchführen: Cert181220180416-2
    30 Sekunden warten…
    Prüfe ob die DNS-Namen validiert wurden…
    Update Alias: Cert181220180416-1
    Validierung OK
    Update Alias: Cert181220180416-2
    Validierung OK
    New-ACMECertificate : Das Argument kann nicht an den Parameter „IdentifierRef“ gebunden werden, da es NULL ist.
    In C:\o.muc.de\CertificateAssistant.ps1:323 Zeichen:34
    + $NewCert = New-ACMECertificate $SubjectAlias -Generate -Alternative …
    + ~~~~~~~~~~~~~
    + CategoryInfo : InvalidData: (:) [New-ACMECertificate], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,ACMESharp.POSH.NewCertificate

    Submit-ACMECertificate : No certificates found
    In C:\o.muc.de\CertificateAssistant.ps1:324 Zeichen:20
    + $SubmitNewCert = Submit-ACMECertificate $SANAlias
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Submit-ACMECertificate], InvalidOperationException
    + FullyQualifiedErrorId : System.InvalidOperationException,ACMESharp.POSH.SubmitCertificate

    30 Sekunden warten…
    Prüfe das Zertifikat…
    Update-ACMECertificate : No certificates found
    In C:\o.muc.de\CertificateAssistant.ps1:332 Zeichen:20
    + $UpdateNewCert = Update-ACMECertificate $SANAlias
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Update-ACMECertificate], InvalidOperationException
    + FullyQualifiedErrorId : System.InvalidOperationException,ACMESharp.POSH.UpdateCertificate

    Get-ACMECertificate : No certificates found
    In C:\o.muc.de\CertificateAssistant.ps1:333 Zeichen:18
    + $CertStatus = (Get-ACMECertificate $SANAlias).CertificateRequest.St …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Get-ACMECertificate], InvalidOperationException
    + FullyQualifiedErrorId : System.InvalidOperationException,ACMESharp.POSH.GetCertificate

    —————————————————————————
    Alle Informationen sind vorhanden, soll das Zertifikat konfiguriert werden?
    —————————————————————————

    Konfiguration starten? (Enter für Weiter / STRG+C zum Abbrechen:

    Prüfe ob bereits ein Vault existiert…
    Prüfe Let’s Encrypt Registrierung…
    Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
    In C:\o.muc.de\CertificateAssistant.ps1:259 Zeichen:3
    + $CertSubject = ((Get-OutlookAnywhere -Server $ExchangeServer).Exter …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    Neuer Identifier:
    DNS: mcsrv-05-exch.medien-computer.de
    Alias: Cert181220180416-1
    Validierung vorbereiten:
    Alias Cert181220180416-1
    Neuer Identifier:
    DNS: office.medien-computer.de
    Alias: Cert181220180416-2
    Validierung vorbereiten:
    Alias Cert181220180416-2
    Let’s Encrypt IIS Verzeichnis auf HTTP umstellen…
    Umstellung auf HTTP erfolgreich
    DNS Namen durch Let’s Encrypt validieren lassen…
    Validierung durchführen: Cert181220180416-1
    Validierung durchführen: Cert181220180416-2
    30 Sekunden warten…
    Prüfe ob die DNS-Namen validiert wurden…
    Update Alias: Cert181220180416-1
    Validierung OK
    Update Alias: Cert181220180416-2
    Validierung OK
    New-ACMECertificate : Das Argument kann nicht an den Parameter „IdentifierRef“ gebunden werden, da es NULL ist.
    In C:\o.muc.de\CertificateAssistant.ps1:323 Zeichen:34
    + $NewCert = New-ACMECertificate $SubjectAlias -Generate -Alternative …
    + ~~~~~~~~~~~~~
    + CategoryInfo : InvalidData: (:) [New-ACMECertificate], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,ACMESharp.POSH.NewCertificate

    Submit-ACMECertificate : No certificates found
    In C:\o.muc.de\CertificateAssistant.ps1:324 Zeichen:20
    + $SubmitNewCert = Submit-ACMECertificate $SANAlias
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Submit-ACMECertificate], InvalidOperationException
    + FullyQualifiedErrorId : System.InvalidOperationException,ACMESharp.POSH.SubmitCertificate

    30 Sekunden warten…
    Prüfe das Zertifikat…
    Update-ACMECertificate : No certificates found
    In C:\o.muc.de\CertificateAssistant.ps1:332 Zeichen:20
    + $UpdateNewCert = Update-ACMECertificate $SANAlias
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Update-ACMECertificate], InvalidOperationException
    + FullyQualifiedErrorId : System.InvalidOperationException,ACMESharp.POSH.UpdateCertificate

    Get-ACMECertificate : No certificates found
    In C:\o.muc.de\CertificateAssistant.ps1:333 Zeichen:18
    + $CertStatus = (Get-ACMECertificate $SANAlias).CertificateRequest.St …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Get-ACMECertificate], InvalidOperationException
    + FullyQualifiedErrorId : System.InvalidOperationException,ACMESharp.POSH.GetCertificate
    Fehler: Zertifikat wurde nicht ausgestellt

    Ich hoffe jemand kann mir dabei helfen.

    Mit freundlichen Grüßen

    Sven Heine

    Antworten
  18. Hallo,
    erst einmal einen super Dank für die erstklassigen Dokus.
    ich habe einen sbs2011 mit Exchange2010 mit diversen Kundendomains bis Outlook 2013 läuft alles super. auch mit den Zertifikaten. wie kann ich es mit den Fremddomains auch unter O2016 oder o365 hin bekommen? Hat jemand einen Tipp?
    Tausend Dank
    Rainer Schenkel

    Antworten
  19. Hallo allerseits!
    Ich habe gerade in meiner Testumgebung einen neuen Exchange 2019 auf einem Windows Server 2019 Core installiert.
    Hat evtl. schon jemand dieses wunderbare Skript in dieser Konstellation getestet und hat Erfahrung damit??
    Oder ist es dafür nicht geeignet?
    Viele Grüße
    Carsten

    Antworten
  20. Hallo,
    habe das Problem hier schon mal gesehen aber keine Lösung dazu. Deshalb nochmals die Frage kann hier jemand helfen?

    SBS 2011 – Exchange 2010 – Windows 2008R2

    Alles läuft bis dann das Zertifikat Importiert wird. Hier erscheint dann folgender Fehler:

    Zertifikat wird Exchange zugewiesen und aktiviert
    Import-ExchangeCertificate : Beim Exchange-Zertifikatvorgang ist eine Ausnahme aufgetreten. Die Fehlermeldung lautet:
    Unknown error (0xe0434f4d)
    At C:\Users\anderl-it\CertificateAssistant.ps1:370 char:4
    + Import-ExchangeCertificate -FileData ([Byte[]]$(Get-Content -Path …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [Import-ExchangeCertificate], LocalizedException
    + FullyQualifiedErrorId : A9DD0D7B,Microsoft.Exchange.Management.SystemConfigurationTasks.ImportExchangeCertificat
    e

    Prüfe ob das Zertifikat aktiviert wurde
    Aktivierung ist fehlgeschlagen

    Das Zertifikat kann über die Verwaltungskonsole importiert werden.

    Was muss ich tun?

    Herzliche Grüße
    Swen

    Antworten
  21. Hallo Jovan,
    Dein Fehler ist, du verbindest dich zum internen DNS Namen. Das funktioniert nicht ohne Fehlermeldung.
    Auch inter nur noch mit dem externen namen arbeiten: mail.domain.at
    Am besten eine neue dns domain mit dem namen mail.domain.at im lokalen dns server anlegen und dann die ip als einzigen eintrag ohne weiteren namen (also nur für die domain) angeben. Damit wird intern NUR der name mail.domain.at aufgelöst und alles andere xyz.domain.at wird an den server im internet weitergeleitet.

    Antworten
  22. Hallo Frank,

    tolle Sache keine Frage! Aber ich komme nicht weiter… :-)
    also… wenn ich Outlook starte bekomme ich immer wieder die Fehlermeldung für „server.domain.local“, dass „der Name auf dem Sicherheitszertifikat ist ungültig oder stimmt nicht mit dem namen der Website überein?“

    Die Umgebung ist einfach:
    1x Server 2016 als DC, DNS, DHCP usw.
    1x Server 2016 mit Exchange 2016.

    Zertifikat von Let’s Encrypt für für folgende DNS:

    DNS-Name=autodiscover.domain.at
    DNS-Name=domain.at
    DNS-Name=mail.domain.at

    Wie bekomme ich die Fehlermeldung weg, bzw. wie muss die Konfiguration der DNS oder des Zertifikates sein das die Fehlermeldung nicht mehr kommt, bzw. Zertifikatsabfrage funktioniert.

    Antworten
  23. Hallo Frank und Co,

    ich bin dabei eine Testumgebung laut deinem How To „Aufbau einer kleinen Exchange 2016 Organisation“ und habe Probleme mit den Zertifikaten.

    Ich habe soweit alles konfiguriert und ein gültiges Zertifikat von Let’sEncrypt beim aufrufen von outlook.xyz.de.
    Ich wollte das Zertifikat jetzt auf der utm importieren. Jedoch wird hier von mir ein Passwort für die .pfx Datei verlangt.

    Bin ich auf dem falschen Weg und muss das Zertifikat gar nicht auf der UTM installieren?

    Beste Grüße

    Antworten
  24. Ich kann die certs nicht verlängern?!?
    Das erstellen vor 2 Monaten hat funktioniert?!?

    15.10.2018 16:30:35;Certificate;Info;Try to create the certificate;
    15.10.2018 16:30:35;Certificate;Info;Using Cert151020181629-1 as certificates CN;
    15.10.2018 16:30:35;Certificate;Info;Certificate creation successfully, Alias SAN151020181629;
    15.10.2018 16:30:35;Certificate;Info;Try to submit the certificate to Let’s Encrypt;
    15.10.2018 16:30:39;Certificate;Error;Failed to submit the certificate for signing;Unexpected error
    +Response from server:
    + Code: Forbidden
    + Content: {
    „type“: „urn:acme:error:unauthorized“,
    „detail“: „Error creating new cert :: authorizations for these names not found or expired: login.ajedv.de“,
    „status“: 403
    }

    Antworten
  25. Vielen Dank für das Script, es hat bei uns intern mit Exchange 2016 bestens funktioniert. Es stellte sich zudem heraus, dass die interne und externe URL nicht alle korrekt eingerichtet wurden. Das gleich korrigiert, alle haben nun den externen URL drin. Das Script werde ich so schnell wie möglich bei Kunden einsetzen.

    Ein Punkt ist leider noch nicht ganz wie es sein soll. Die Outlook 2016 Clients im LAN reklamieren über das Zertifikat, den der Hostname im LAN (server02.firma.local) entspricht nicht der Hostname im Zertifikat (remote.firma.ch). Dazu habe ich noch den AutoDiscoveryServiceInternalUri angepasst, die zeigte vorher auf server02.firma.local und neu auf remote.firma.ch, hat aber nichts gebracht. In DNS (LAN) habe ich eine Zone remote.firma.ch konfiguriert mit der interne IP des Mailservers. Ein neues Outlook Profile erstellen funktioniert zwar, generiert jedoch den gleichen Fehler.

    Hat jemand eine Idee was ich da übersehe?

    Vielen Dank
    Eric

    Antworten
  26. Danke für die Antwort, es lag nicht an der Autodiscover URL sondern OutlookAnywhere
    Außerdem war es ein 2016 und kein 2013, mein Fehler.

    Set-OutlookAnywhere -Identity „SERVERNAME\Rpc (Default Web Site)“ -InternalClientAuthenticationMethod NTLM -InternalHostname URL -InternalClientsRequireSsl $True

    danach funktioniert alles wieder einwandfrei.

    Aber noch eine andere Frage, muss Port 80 dauerhaft offen sein oder reicht es wenn man ihn alle 3 Monate öffnet für die Erneuerung?

    Antworten
  27. Hallo zusammen,

    vielen Dank für das Script. (Exchange 2013)
    Das Script lief einwandfrei, alle Einstellungen wurden auf Servername.mydomain.com geändert (Internal / External) auch AutoDiscoverService via Shell. DNS wurde ebenfalls angepasst. Alles sieht gut aus…

    Dennoch erhalte ich nun beim start von Outlook immernoch den Zertifikatsfehler servername.mydomain.local „Der Name auf em Sicherheitszertifikat ist ungültig….“

    Virtual Directories hab ich soweit geprüft für OWA, OBA, EWS, ActivSync und ECP umgestellt auf meine externe URL, hier gibt es keine .local Adresse mehr, wo könnte sie noch hinterlegt sein?

    Antworten
  28. Hi,
    eine kurze frage. Ich beschäftige mich gerade mit dem Thema Exchange Hybrid Deployment. Als Transport-Zertifikat dafür muss man ja offenbar ein fixes Zertifikat konfigurieren. Ich könnte als ein LE-Zertifikat verwenden, müsste dann aber nach einem Renewal auch die Hybridkonfiguration aktualisieren. Tut der Zertifikatsassistent das evtl. schon oder hast Du einen Tipp, was man beachten muss?
    Danke & Gruß
    Jan

    Antworten
  29. Hallo an Frank und die Gemeinde,

    habe auch versucht das Script mit einem SBS2011 zu installieren. Es funktioniert bis zum Import des Zertifikates. Der Fehler wurde hier auch schon gepostet.

    Import-ExchangeCertificate : Beim Exchange-Zertifikatvorgang ist eine Ausnahme aufgetreten. Die Fehlermeldung lautet:
    Unknown error (0xe0434f4d)
    In D:\Programme\CertificateAssistant\CertificateAssistant.ps1:370 Zeichen:4
    + Import-ExchangeCertificate -FileData ([Byte[]]$(Get-Content -Path $CertPath – …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [Import-ExchangeCertificate], LocalizedException
    + FullyQualifiedErrorId : A8B80CEE,Microsoft.Exchange.Management.SystemConfigurationTasks.ImportExchangeCertificat
    e

    Wenn ich nun in der Powershell manuell versuche das Zertifikat zu importieren kommt ebenfalls ein Fehler.

    Cmdlet Import-ExchangeCertificate an der Befehlspipelineposition 1
    Geben Sie Werte für die folgenden Parameter an:
    FileData[0]: C:\Users\admin\AppData\Local\Temp\2\SAN0000000000.pfx
    „C:\Users\admin\AppData\Local\Temp\2\SAN0000000000.pfx“ kann aufgrund eines Formatfehlers nicht als System.Byte erkannt werden.

    Manuelles importieren über Exchange funktioniert allerdings ohne Probleme

    Antworten
  30. Ich habe das Script bei mir ausgeführt und weitere Domains hinzugefügt. Beim erneuten ausführen wird immer nur eine Domain berücksichtigt. Wie erreiche ich es das er alle von mir eingetragenen Domains wieder erneuert?

    Antworten
  31. Bei mir ging es dann auch ohne AllowClobber ich hab einfach nochmals alle Module Deinstalliert rebootet und neu installiert habe im script AllowClobber entfernt und jetzt läuft es.

    Antworten
  32. Mir wird beim Starten des Scripts folgendes ausgespuckt

    Install-Module : Es wurde kein Parameter gefunden, der dem Parameternamen „AllowClobber“ entspricht.
    In C:\Users\Administrator.NET\desktop\CertificateAssistant.ps1:38 Zeichen:58
    + Install-Module -Name ACMESharp -RequiredVersion 0.8.1 -AllowClobber #Modul in …
    + ~~~~~~~~~~~~~
    + CategoryInfo : InvalidArgument: (:) [Install-Module], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Install-Module

    Fehler: ACME Sharp Modul konnte nicht installiert werden

    wenn ich ACMESharp dann von hand installiere Ohne AllowClobber dann bekomme ich beim starten des scripts folgende Meldung

    Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
    In C:\Users\Administrator\desktop\CertificateAssistant.ps1:108 Zeichen:5
    + [array]$CertNames += ((Get-MapiVirtualDirectory -Server $ExchangeServer).Ext …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    Jemand ne Idee was ich falsch mache. Habe ein Win2012R2Std mit Exchange2013 (Version 15.0 ‎(Build 1156.6))

    Antworten
  33. Hallo zusammen,

    zum Thema „diverse ***.local DNS-Namen“ ist die Lösung denkbar einfach.

    Im Script sollte folgende Zeile ergänzt werden:

    $CertNames = $CertNames | where {$_ -NotLike „*.local“}

    Ergänzt die Zeile for der Zeile:

    $CertNames = $CertNames | select –Unique

    und es werden alle DNS-Name mit *.local am Ende aus dem Array gelöscht.

    Antworten
  34. Hallo zusammen,

    wir haben im alten Zertifikat auch diverse ***.local DNS-Namen welche mit dem Skript nicht funktionieren ->
    Name does not end in a public suffix

    Suche auch dringend eine Lösung …….
    Vielen Dank in Voraus und Gruß

    Jens

    Antworten
  35. Ich kann kein -renew:$true verwenden, da sagt er immer der Eintrag existiert schon im Zertifikatspeicher!

    Muss jedes mal ein neues Zertifikat erstellen! :-(

    Gibt es das ganze nicht irgendwo als funktionierend? :-(

    Antworten
  36. Hallo,

    ich habe ein kleines Problem mit dem Script unter Server 2016 mit Exchange 2016 CU7.

    folgende Ausgabe gibt das script:

    —————————————————————————————————————————

    Prüfe ob bereits ein Vault existiert…
    Prüfe Let’s Encrypt Registrierung…
    Neuer Identifier:
    DNS: w2k16-exchange.***.local
    Alias: Cert310120180358-1
    New-ACMEIdentifier : Error creating new authz :: Name does not end in a public suffix
    In C:\letsencrypt\CertificateAssistant.ps1:270 Zeichen:14
    + $NewID = New-ACMEIdentifier -Dns $ExchangeSAN -Alias $ACMEAlias
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidData: (ACMESharp.Vault.Model.IdentifierInfo:IdentifierInfo) [New-ACMEIdent
    AcmeWebException
    + FullyQualifiedErrorId : urn:acme:error:malformed (400),ACMESharp.POSH.NewIdentifier
    Validierung vorbereiten:
    Alias Cert310120180358-1
    Complete-ACMEChallenge : Der angegebene Schlüssel war nicht im Wörterbuch angegeben.
    In C:\letsencrypt\CertificateAssistant.ps1:273 Zeichen:20
    + … lidateReq = Complete-ACMEChallenge $ACMEAlias -ChallengeType http-01 …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Complete-ACMEChallenge], KeyNotFoundException
    + FullyQualifiedErrorId : System.Collections.Generic.KeyNotFoundException,ACMESharp.POSH.CompleteChallenge

    Neuer Identifier:
    DNS: mail.***.de
    Alias: Cert310120180358-2
    Validierung vorbereiten:
    Alias Cert310120180358-2
    Let’s Encrypt IIS Verzeichnis auf HTTP umstellen…
    Umstellung auf HTTP erfolgreich
    DNS Namen durch Let’s Encrypt validieren lassen…
    Validierung durchführen: Cert310120180358-1
    Submit-ACMEChallenge : Der angegebene Schlüssel war nicht im Wörterbuch angegeben.
    In C:\letsencrypt\CertificateAssistant.ps1:297 Zeichen:17
    + … $Validate = Submit-ACMEChallenge $ACMEAlias -ChallengeType http-01
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Submit-ACMEChallenge], KeyNotFoundException
    + FullyQualifiedErrorId : System.Collections.Generic.KeyNotFoundException,ACMESharp.POSH.SubmitChallenge

    Validierung durchführen: Cert310120180358-2
    30 Sekunden warten…
    Prüfe ob die DNS-Namen validiert wurden…
    Update Alias: Cert310120180358-1
    Update-ACMEIdentifier : Der angegebene Schlüssel war nicht im Wörterbuch angegeben.
    In C:\letsencrypt\CertificateAssistant.ps1:308 Zeichen:21
    + $ACMEIDUpdate = Update-ACMEIdentifier $ACMEAlias
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Update-ACMEIdentifier], KeyNotFoundException
    + FullyQualifiedErrorId : System.Collections.Generic.KeyNotFoundException,ACMESharp.POSH.UpdateIdentifier

    Fehler: Validierung für Alias Cert310120180358-1 fehlgeschlagen

    —————————————————————————————————————————

    Aus irgend einem Grund versucht das Script den internen Namen über letscrypt zu prüfen. Dies geht natürlich schief. Ich hatte hier und im original Post schon alle Kommentare durchgearbeitet.

    ACME ist 0.8.1 installiert
    MIME-Typ auf dem acme-challange im ISS werden auch korrekt gesetzt

    Kann mir jemand dazu einen Tipp geben?

    Antworten
  37. Seit ich das Zertifikat installiert und die Einstellungen am Exchange verändert habe, kann ich kein neues Profil bei Outlook einrichten. Ich bekomme die Fehlermeldung:
    „Die Aktion kann nicht abgeschlossen werden. Es steht keine Verbindung mit Microsoft Exchange zur Verfügung. Outlook muss im Onlinemodus oder verbunden sein, um diesen Vorgang abzuschließen.“
    Zuvor kommt eine Fehlermeldung da der autodiscover nicht der gleiche Host ist. Ich konnte das Zertifikat nicht auf autodiscover austellen. Kann es an dem Zertifikat liegen, dass das Outlook-Profil nicht mehr angelegt werden kann?

    Antworten
  38. Hallo,
    bekomme auf einen SBS2011 mit Exchange 2010 folgende Meldung wenn das Script versucht das Zert auf dem Exchange zu importieren:

    Zertifikat wird Exchange zugewiesen und aktiviert
    Import-ExchangeCertificate : Beim Exchange-Zertifikatvorgang ist eine Ausnahme aufgetreten. Die Fehlermeldung lautet:
    Unknown error (0xe0434f4d)
    In C:\CertificateAssistant\CertificateAssistant.ps1:370 Zeichen:4
    + Import-ExchangeCertificate -FileData ([Byte[]]$(Get-Content -Path $CertPath – …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [Import-ExchangeCertificate], LocalizedException
    + FullyQualifiedErrorId : A84B44C1,Microsoft.Exchange.Management.SystemConfigurationTasks.ImportExchangeCertificat
    e

    Prüfe ob das Zertifikat aktiviert wurde
    Aktivierung ist fehlgeschlagen

    Kann mir jemand helfen???

    Antworten
  39. Hallo Zusammen,
    danke für den Hinweis von Alexander Schröder. Ich konnte die Version 5.1 wieder deinstallieren.
    Ich musste für WinRM die Registry-Einstellungen noch anpassen, dann war alles wieder gut.
    VG Dieter

    Antworten
  40. Script hat auf SBS2011 geklappt.
    Musste nur Powershellget als msi installieren.

    Schön wäre es wenn jetzt noch die Anforderung nur per 443 gehen würde, damit man den Port 80 wieder schließen könnte.

    Antworten
  41. einfach unter Programme (Systemsteuerung\Programme\Programme und Features\installierte Updates\ )das entsprechende KB deinstallieren. Dann sollte es wieder gehen.

    Antworten
  42. Hallo Zusammen,
    ich habe auf meinen Windows 2012 R2 und Exchange 2013 CU12 die Fehlermeldung erhalten „Install-Module“ not found und habe voreilig WMF 5.1 installiert. Nun funktioniert die EMS nicht mehr. Wie kann ich WMF 5.1 deinstallieren, so dass WMF 4.0 wieder sauber arbeitet?
    VG Dieter

    Antworten
  43. ich habe noch einen tipp den ich gerne loswerden möchte und mich jetzt einige zeit an suche gekostet hat.

    bitte führt das script bevor das ihr die Alten SSL/TLS Protokolle am Exchange Server deaktiviert (thema Exchange 2016 Installation absichern). ist das geschehen kann keine verbindung zum repository aufgebaut werden.

    danach kann man die protokolle mit dem iis crypto wieder deaktivieren.

    Antworten
  44. Hallo,
    Nach ein bisschen herumprobieren lief das Script auch bei mir durch (W2k12R2/Ex 2016) bis dann zum schluss diese Fehlermeldung kommt.
    „Carry out validation: Cert171120170209-1
    Carry out validation: Cert171120170209-2
    Carry out validation: Cert171120170209-3
    Carry out validation: Cert171120170209-4
    wait 30 Seconds…
    Check whether the DNS names have been validated…
    Update Alias: Cert171120170209-1
    Error: Validation failed for alias Cert171120170209-1“
    Ports 80/443 sind weitergeleitet, Firewall ist aus.
    Woran könnte das liegen?

    Antworten
  45. vielleicht kann mir hier jemand helfen:
    Exchange fängt 3 Monate vor Ablauf eines Zertifikats Errors ins Eventlog zu schreiben:
    „ID 12017: An internal transport certificate will expire soon.
    Thumbprint:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, expires: 04.01.2018 08:00:34“
    und coolerweise noch eine weitere:
    „ID 12018 The STARTTLS certificate will expire soon: subject: email.xxxxxxx.de, thumbprint: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, expires: 04.01.2018 08:00:34. Run the New-ExchangeCertificate cmdlet to create a new certificate.“
    das ist zwar nur ein Schönheitsfehler, aber dennoch nervig.
    das neue Zertifikat zu holen ist hier ja keine Lösung, irgendwo müsste man den Zeitpunkt der Meldung nur verstellen können (eine Woche vorher oder so), nur wo?

    Danke im Voraus

    Antworten
  46. Nachtrag: ACMESahrp bitte mit Install-Module -Name ACMESharp -RequiredVersion 0.8.1 -AllowClobber installieren :) sons

    @Frank, kannst du die Kommentare zusammenführen? Danke

    Antworten
  47. das Script an sich ist Super !!!
    Auf dem Server 2012R2 mit Exchange 2016 CU6 musste ich allerdings einige Unwegbarkeiten ausräumen, damit das Script fehlerfrei durchläuft:
    PSget gibts für die PS 3 oder 4 als MSI-Download: hier: https://docs.microsoft.com/de-de/powershell/gallery/psget/get_psget_module
    damit kann man dann das passende ACMESharp installieren mit Install-Module -Name ACMESharp -RequiredVersion 0.8.1
    und dann läuft das Script einwandfrei durch

    Von Installation des PS 5 auf dem 2012R2 mit Exchange wird abgeraten, was ich auch bestätigen kann: davon geht dann die Exchange-PS-Console flöten.

    Danke und Gruß

    Alexander

    Antworten
  48. Hallo!
    Ein super Skript! Dafür erst mal vielen Dank!!
    Ich habe aber nun ein kleines Problem auf einem Server 2016 an dem ich schier verzweifle … :-(
    Und zwar kann bei mir ACME nicht installiert werden, da die PS angeblich keine Verbindung zum Internet hat. Daher kann nichts nachgeladen werden. Der Server ist aber direkt ohne Proxy mit dem Internet verbunden. Der Server steht zu Hause und hängt hinter einer FritzBox. Ping an eine externe URL funktioniert auch.
    Auf einem Server in Azure hat es auch problemlos funktioniert, auch direkt im Internet und auch 2016. Da läuft das Skript ohne Probleme durch.
    Von Exchange her ist auf beiden Seiten 2016 mit CU6 installiert.
    Ich finde einfach den Unterschied bei beiden Servern wegen der Verbindung zum Internet!!!
    Habt dazu vielleicht jemand eine Idee???
    Danke an alle schon im Voraus!
    Viele Grüße
    Carsten

    Antworten
  49. Powershell v5 wird nur für PSGet benötigt um ACMESharp zu installieren. Über kleine Umwege kann man ACMESharp auch manuell ohne PSGet installieren (z. B. Save-Module von einem anderem System mit PSv5 und dann in den entsprechenden Powershell Module Ordner auf dem Zielsystem kopieren). Wichtig hierbei, die Version 0.8.1 verwenden, mit der aktuellen Version von ACMESharp gab es bei meinem Test Probleme.

    WMF Updates würde ich bei Exchange Servern vermeiden: „Version of Windows Management Framework built into the release of Windows Server you’re installing Exchange on.“ siehe https://technet.microsoft.com/de-de/library/ff728623(v=exchg.150).aspx

    Antworten
  50. Hallo Mr Buabe,

    soweit ich weiss ist Powershell 5 inkompatibel mit dem SBS 2011 – gibt es da irgendwelche Seiteneffekte oder Fehlermeldungen?
    Ist das in mehreren Installationen getestet?

    Antworten
  51. Getestet auf SBS2011, Exch2010 SP3, CU17 bzw. CU18 (Stand 09/2017)
    set-executionpolicy bypass
    und Windows Management Framework 5.1 installieren müssen https://www.microsoft.com/en-us/download/details.aspx?id=54616

    Skript funktioniert 1a! Null IIS-Kenntnisse erforderlich, keine Exchange, gar nix. Funktioniert sogar EINFACHER als der Exchange-/SBS-integrierte Assistent und der ist nicht öffentlich gültig.
    Aufgabenplanung auch Task erstellen lassen und Erneuerung auf jedes Monat eingestellt.

    TOP Skript!

    Antworten
    • Hallo!

      Skript funktioniert Top.

      Wie geht man vor wenn man einen DNS-Namen löschen will?

      Muß man ein ganz neues Zertifikat generieren?

      Und wenn ja, was muss alles gelöscht werden um ein ganz neues Zert zu generieren?

      Danke!

      Antworten
      • Ja, ein Zertifikat wird immer komplett ausgestellt, teile davon können nicht mehr entfernt oder geändert werden. ALLE Änderungen bedingen eine neuerstellung des Zertifikats.

        Antworten

Schreibe einen Kommentar