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

65 Kommentare zu “Neue Version des Exchange Zertifikatsassistent für Let’s Encrypt”

  1. 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!

    1. 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!

      1. 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.

  2. 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?

  3. 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

  4. 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

  5. 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

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

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

  7. 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

  8. 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?

  9. 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.

  10. 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

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

  12. 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.

  13. 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

  14. 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???

  15. 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?

  16. 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?

  17. Hallo,

    ich habe das gleiche Problem wie TobiasK nur auf einem SBS2011 mit Exchange 2010

    gibt es hierzu einen Tipp bzw. Lösung??

    Vielen Dank
    Frank

  18. 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? :-(

  19. Richard, hier funktioniert das Script wirklich super…

    wie wäre es mit einem Post Fehlermeldung?
    Meine Glaskugel funktioniert leider derzeit nicht.

  20. 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

  21. 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.

  22. 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))

  23. 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.

  24. 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?

  25. 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

  26. 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

  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?

  28. 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?

  29. 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

  30. 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
    }

  31. 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

  32. 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.

  33. 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.

  34. 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

  35. 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

  36. 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

  37. 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

  38. 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.

    1. 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

  39. 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?

    1. Hallo Oliver,
      solange du .local URLs verwendest, kannst du den Assistenten nicht verwenden. Du kannst zwar die URLs im Script überschreiben, aber es würde später zu Zertifikatswarnungen kommen.
      Gruß,
      Frank

    2. 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

  40. 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

  41. 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

    1. 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

  42. 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?

  43. 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?

  44. @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

  45. 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

  46. 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

  47. 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?

    1. Ich könnte das Problem beheben. Nur bin ich mir immer noch nicht sicher ob das automatische Neuerstellen ohne Probleme funktioniert.

  48. 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?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.