Ich hatte es ja bereits angekündigt, dass der Zertifikatsassistent ein Update für Let’s Encrypt erhält. Die Version für Exchange 2016 ist jetzt fertig.
Der Zertifikatsassistent kann mit wenigen Angaben ein Zertifikat von Let’s Encrypt holen und danach auch vollautomatisch erneuern.
Getestet habe ich dieses Script bisher mit Windows Server 2016 und Exchange Server 2016. Tests für Server 2012 R2 und Exchange Server 2013/2016 bereite ich gerade vor und werde die Version ggf. entsprechend anpassen. Bisher gibt es also nur Unterstützung für Server 2016 und Exchange 2016, weitere Versionen folgenden.
Das Script funktioniert relativ einfach und ohne viel zutun. Folgende Voraussetzungen gibt es allerdings:
- Exchange Server muss mit gültigen URLs / Hostnamen konfiguriert sein
- Alle Hostnamen müssen aus dem Internet erreichbar sein
- Die konfigurierten Hostnamen müssen per HTTP (Port 80) aus dem Internet erreichbar sein
Die Vorausetzungen gelten damit Let’s Encrypt die Domains validieren kann. Interne Hostnamen, wie zum Beispiel exsrv1.domain.local lassen sich also nicht verwenden.
Der Zertifikatsassistent liest die konfigurierten Hostnamen aus und holt dann ein entsprechendes SAN-Zertifikat von Let’s Encrypt. Das Zertifikat wird im Anschluss automatisch aktiviert.
Da Let’s Encrypt Zertifikate nur 3 Monate lang gültig sind, kann eine geplante Aufgabe erstellt werden, die 4 Tage vor Ablauf das Zertifikat erneuert. Für die Erneuerung ist keine Benutzerinteraktion nötig.
Für Tests lässt sich der Zeitpunkt der Erneuerung selbst bestimmen (Zeile 402 im Script). Beispielsweise könnte hier 30 Tage eingetragen werden, um genügend Zeit für die Fehleranalyse zu haben. Bisher habe ich das Script in drei unterschiedlichen Exchange Umgebungen getestet, bisher erfolgreich. Ich freue mich aber über Feedback.
So sieht die Oberfläche mit allen nötigen Eingaben aus:
Der Rest funktioniert automatisch und dauert ca. 2 Minuten:
In der Aufgabenplanung wird eine Aufgabe zu Erneuerung angelegt, Die Aufgabe startet jeden Tag um 23:00 Uhr und erneuert das Zertifikat 4 Tage vor Ablauf:
Bekannte Probleme:
- Wenn noch keine Registrierung bei Let’s Encrypt vorliegt, wird eine Fehlermeldung generiert, die Registrierung wird dann aber durchgeführt.
- Es gibt noch keine Benachrichtigung oder Fehlerbehandlung für das Erneuern
Abhängigkeiten:
- PowerShell IIS Modul (Webadministration)
- Exchange Management Shell
- ACMESharp PowerShell Client (wird installiert, wenn nicht vorhanden)
Wer Lust hat kann die erste Version testen, natürlich können hier noch diverse Probleme auftauchen, daher bitte vorerst nicht in produktiven Umgebungen einsetzen.
Let's Encrypt Exchange Zertifikatsassistent
Feedback und Probleme bitte via Kontaktformular. Bei Problemen bitte immer Screenshots oder die Ausgabe anhängen.
Hinweis: Eine komplett überarbeitete Version findet sich hier (Beta):
LetsEncrypt unterstützt mittlerweile Wildcard-Zertifikate (*.example.org). Diese laufen auf unserem externen Apache Webserver problemlos und werden regelmäßig geupdated.
Wäre es möglich, diese Zertifikate direkt in Exchange zu importieren? Die Zertifikate liegen allerdings als „.pem“ files vor und irgendwie mag Exchange / IIS das wohl nicht richtig.
Ich würde gerne den Schritt sparen, neue Zertifikate erzeugen zu lassen schließlich sind sie schon da. Auf den ACME-Client unter Windows könnte ich dann verzichten.
Hallo zusammen,
ich habe das Problem, das ich immer wieder den lokalen Namen mit drin habe obwohl ich alles bereinigt habe und ihn so nicht mehr finden kann. Woher er den nimmt, keine Ahnung. Das einzige was ich mir vorstellen könnte, ist das der Exchange auf einem AD-Controller mit Zertifizierungsstelle installiert ist. Und bevor jetzt der Aufschrei kommt: Ja ich weiß, das soll man nicht machen. Aber Kunden wollen nun mal sparen und leider meist an der IT und den Lizenzen.
Auch habe ich mit der Validierung das selbe Problem wie schon angesprochen wurde.
Moin,
das Update kann ich nicht mehr herunterladen.
Version 1 auf ex 2019 gibt folgende Meldung:
—————————————————————————
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…
Kein Vault gefunden, versuche neuen Vault anzulegen…
Prüfe Let’s Encrypt Registrierung…
Get-ACMERegistration : No registrations found
In C:\Users\exadmin\Desktop\exchange scripte\CertificateAssistant.ps1:242 Zeichen:19
+ $Registration = Get-ACMERegistration
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-ACMERegistration], InvalidOperationException
+ FullyQualifiedErrorId : System.InvalidOperationException,ACMESharp.POSH.GetRegistration
Wsrnung: Es wurde keine Registrierung bei Let’s Encrypt gefunden, neue Registrierung wird durchgeführt
Registrierung bei Let’s Encrypt wurde durchgeführt
Neuer Identifier:
DNS: autodiscover.xxxxxx.de
Alias: Cert220720190422-1
Validierung vorbereiten:
Alias Cert220720190422-1
Neuer Identifier:
DNS: outlook.xxxxxx.de
Alias: Cert220720190422-2
Validierung vorbereiten:
Alias Cert220720190422-2
Neuer Identifier:
DNS: mail.xxxxxx.de
Alias: Cert220720190422-3
Validierung vorbereiten:
Alias Cert220720190422-3
Let’s Encrypt IIS Verzeichnis auf HTTP umstellen…
Umstellung auf HTTP erfolgreich
DNS Namen durch Let’s Encrypt validieren lassen…
Validierung durchführen: Cert220720190422-1
Validierung durchführen: Cert220720190422-2
Validierung durchführen: Cert220720190422-3
30 Sekunden warten…
Prüfe ob die DNS-Namen validiert wurden…
Update Alias: Cert220720190422-1
Fehler: Validierung für Alias Cert220720190422-1 fehlgeschlagen
PS C:\Users\exadmin\Desktop\exchange scripte>
Liebe Grüße
Rene
Das gleiche Problem hab ich auch,
hatte dazu auch schon das Kontaktformular bemüht aber kam bis jetzt nichts zurück….
Hallo,
hab auch nen 2019er am laufen.
Wollte das Beta testen aber kann es nicht laden. Ist dies beabsichtigt?
Vg
Matze
Hallo Matze,
ich konnte den Anhang auch nicht runterladen. Man kann aber auch die erste Version des Scripts mit Exchange 2019 nutzen (soweit ich das testen konnte). Bei der zweiten Version die es zwischenzeitlich mal gab, ist das Problem, das nur ein DNS-Eintrag zu Let’s Encrypt gemeldet wird. Damit gibt es dann meist einen Fehler, wenn man auch auf autodiscover.example.com setzt. Vielleicht kann das Frank auch noch fixen :)
VG Shorty
Moin Franky,
habe deinen Assistenten auf Server 2019 & Exchange 2019 getestet und wollte dir ein Feedback geben:
Funktioniert perfekt!! Vielen Dank!!
Eine Meldung kommt allerdings, da müsste später was getan werden.
Hier die Meldung:
—————————————————————-
Lade ACMESharp Modul…
Lade IIS Webadministration Modul…
Lade Exchange Management Shell…
Exchange Server 2013/2016 wurde erkannt
Lese Exchange Konfiguration…
WARNUNG: Das Cmdlet „Get-ClientAccessServer“ wird in einer künftigen Version von Exchange entfernt. Verwenden Sie
stattdessen das Cmdlet „Get-ClientAccessService“. Wenn in Skripts das Cmdlet „Get-ClientAccessServer“ verwendet wird,
aktualisieren Sie die Skripts, sodass sie das Cmdlet „Get-ClientAccessService“ verwenden. Weitere Informationen finden
Sie unter „http://go.microsoft.com/fwlink/p/?LinkId=254711“.
—————————————————————-
Viele Grüße
Uli
PS: mit ner älteren Version CertificateAssistant_v2_EX2013.ps1 ging es nun.
Michael sagt:
3. Juli 2018 um 12:17
Moin,
Habe das Script schon für 2010, 2013 und 2016 erfolgreich durchlaufen lassen.
Leider erhalte ich nun bei einem 2012 R2 2013 eine .local Adresse zum Zertifizieren. Wie auch Michael am 3. Juli 2018 um 12:17, habe im ECP alle Adressen geprüft, bzw. geändert.
Hat da wer noch ne Idee?
@Stephan
Das könnte durchaus sein.
Wie verlängere ich das ohne eine CA? :D
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?
Hi David,
Kann es sein, dass dein EFS Zertifikat abgelaufen ist?
https://github.com/ebekker/ACMESharp/issues/334
Submit-ACMECertificate : Der Zugriff auf den Pfad
„C:\ProgramData\ACMESharp\sysVault\45-KEYPM\8d6d28f1-2a25-4679-9bee-88e376f03792-key.pem“ wurde ver
In C:\Users\ac-admin\Downloads\CertificateAssistant.ps1:324 Zeichen:20
+ $SubmitNewCert = Submit-ACMECertificate $SANAlias
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Submit-ACMECertificate], UnauthorizedAccessExcepti
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,ACMESharp.POSH.SubmitCertificate
Irgendjemand eine Idee wie ich das beheben kann?
hallo zusammen,
bei mir steht in 4 tagen der renew am srv2012r2 und exchange 2016 an.
ich erhalte mit diesem script nun diese fehler. es wird wohl am „alten“ script liegen. gibt es irgendeine möglich es manuell „anzustupsen“? das neue script fnkt. mit 2012er ja leider noch nicht. danke für die info!
gruß
Submit-ACMECertificate : Error creating new cert :: authorizations for these names not found or expired:
autodiscover.xxxx.co.at, outlook.xxxx.co.at
In C:\CertificateAssistant\CertificateAssistant.ps1:431 Zeichen:6
+ Submit-ACMECertificate $SANAlias
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (ACMESharp.Vault.Model.CertificateInfo:CertificateInfo) [Submit-ACMECe
rtificate], AcmeWebException
+ FullyQualifiedErrorId : urn:acme:error:unauthorized (403),ACMESharp.POSH.SubmitCertificate
Update-ACMECertificate : Certificate has not been submitted yet; cannot update status
In C:\CertificateAssistant\CertificateAssistant.ps1:435 Zeichen:6
+ Update-ACMECertificate $SANAlias
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Update-ACMECertificate], Exception
+ FullyQualifiedErrorId : System.Exception,ACMESharp.POSH.UpdateCertificate
Get-ACMECertificate : Cannot export PKCS12; private hasn’t been imported or generated
In C:\CertificateAssistant\CertificateAssistant.ps1:438 Zeichen:20
+ $CertExport = Get-ACMECertificate $SANAlias -ExportPkcs12 $CertPath -Certif …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-ACMECertificate], InvalidOperationException
+ FullyQualifiedErrorId : System.InvalidOperationException,ACMESharp.POSH.GetCertificate
Import-ExchangeCertificate : Zugriffsfehler für die importierte Zertifikatdatei für Server WUNDERER-SRV2. Ursache: Die
Datei „C:\Users\admininstall\AppData\Local\Temp\1\SAN01032018.pfx“ konnte nicht gefunden werden.
In C:\CertificateAssistant\CertificateAssistant.ps1:443 Zeichen:8
+ Import-ExchangeCertificate -FileName $CertPath -FriendlyName $ExchangeSub …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Import-ExchangeCertificate], InvalidOperationException
+ FullyQualifiedErrorId : [Server=xxxxx-SRV2,RequestId=f257fb5e-8b8d-4f73-bd29-9bc95c280f35,TimeStamp=01.03.201
8 06:32:16] [FailureCategory=Cmdlet-InvalidOperationException] 2402C2F2,Microsoft.Exchange.Management.SystemConfig
urationTasks.ImportExchangeCertificate
Hallo Franky,
das Skript findet unter anderem auch per DNS ein .local. Wenn ich das Skript weiterlaufen lasse, dann kommen für das .local Fehlermeldungen.
Wo bekomme ich das .local deaktiviert, damit er es bei der Ausführung des Skriptes nicht findet?
Gruß
Christoph
Hallo Frank,
ich habe noch eine Rückfrage zu den Let’s Encrypt-Zertifikaten. Können diese dann mit deinem Script auch für IMAP, POP und SMTP genutzt werden ohne das ständig die Kommandozeile bemüht werden muss? Weil gerade das, würde ja es super vereinfachen.
So,
mal eine Rückmeldung, was ich gemacht habe.
Ich habe das Zertifikat bei PSW gebucht. (Für drei Jahre).
Klar, koman hätte es auch kostenlos haben können. Da aber dann alle 12 Wochen der import für die UTM fällig ist, habe ich es gelassen.
Nachdem ich das PSW Zertifikat eingebunden hatte, musste die UTM noch versorgt werden.
Der import klappte aber nicht. Die Fehlermeldung hier: Zertifikat schon vorhanden. (Sinngemäß)
Daraufhn habe ich Zertifikat auf der UTM gelöscht und per Export (Exchange) neu erstellt und in die UTM geladen.
Dabei sind aber die Regeln auf der Web application FW der UTM teilweise gelöscht worden. Diese musste ich dann neu installieren. Diese Info, fals jemand vor dem gleichen Problem steht.
evtl. gibt es einen anderen Weg, dies zu umgehen und man muss nicht löschen. Ich habe nur keinen gefunden.
Frage etwas ausserhalb: Ich möchte mich nun per active Sync und iphone am outlook anmelden.
Das iphone wird auch ngezeigt in exchange und ich habe es freigegeben.
Es kommt dennoch nicht zum connect, da das iphone die Verbindung nicht aufnimmt.
Die Meldung ist hier: (Sinngenäß) Keine verbindung möglich, da die TLD nicht gültig signiert ist.
Das stimmt, der die TLD hatte einZertifikat. es st aber abgelaufen.
Nun die Frage: Ist es überhaupt notwendig, dass die TLD signiert ist . Habe ja die Umgebung von dir nachgebaut „kleine Exchange Umgebung“. lediglich die beiden subdomains habe ich, wie oben geschrieben, per SAN zertifikat signiert.
Grüße
Danke für die Rückmeldung.
Die Nacharbeit bezieht sich auf den Export / Import Exchange -> UTM , ist das richtig?
Das bedeutet dann, dass diese Arbeit alle 3 Monate notwendig ist, wenn das script automatisiert
bei letsencrypt ein neues anfordert und installiert?!
Grüße
Martin
Hallo Martin,
genau, du könntest natürlich das Script auch anpassen, dass es automatisch auf die UTM übertragen wird.
Gruß,
Frank
Thank you for figuring out how to make this work.
Mentioned here: https://community.spiceworks.com/topic/1987653-lets-encrypt-exchange?page=1#entry-7562885
I also made some changes based on your code and came up with something to update my Remote Desktop Gateway certificate and an stunnel installation.
Hallo Frank,
ich habe eine Frage bzgl. des sciptes, was Du / Ihr so toll weiterpflegt:
Funktioniert das auch auf der von die beschriebenen Umgebung „Aufbau einer kleinen Exchange Umgebung“?
Also Fritzbox / UTM / Exchange.
Zweite Frage: Wurde hier mal ein link angebeben, der auf einen Zertifikatverkäufer verlinkt. Ich finde diese URL aber nicht mehr. Bin aber auch nicht 100% sicher ob es hier in deinem Blog war. Wir suchen einen Anbieter, der 3 Jahres Zertifkate austellt. ca 100 Euro für 3 Jahre.
Danke Dir und weiter so :-)
Grüße
Hallo Martin,
ja, das Script funktioniert dort auch, benötigt aber etwas händische Nacharbeit um das Zertifikat auf die UTM zu portieren.
Für die Zertifikate meinst du wahrscheinlich PSW: https://www.psw-group.de/
(Du musst dich allerdings beeilen, 3-Jahres Zertifikate gibt es nur noch bis zum 20.2.2018)
Gruß,
Frank
Hallo Frank,
vielen Dank mit Hilfe des White Papers habe ich alles verstanden und konnte es perfekt umsetzen. So dass jetzt auch der Zertifikat Assistent fehlerfrei durchgelaufen ist. Eine Sache ist mir noch aufgefallen, die automatische Aufgabe zum Erneuern des Zertifikates, zeigt immer eine Fehlermeldung schon beim drauf klicken -> „Mindestens ein Protokoll in der Abfrage enthält Fehler“ Protokoll: Microsoft-Windows-TaskScheduler/Opertational Fehler: Die angegebene Abfrage ist ungültig
Wenn ich den Fehler mit OK bestätige komme ich in die Eigenschaften der Aufgabe, die Frage ist nur ob diese so auch funktioniert ….
Programm/Skript: powershell.exe
Argumente hinzufügen (optional) : -Command „&’C:\powershell\CertificateAssistant.ps1′ -renew:$true“
Den Pfad C:\powershell\CertificateAssistant.ps1 gibt es und das Skript liegt dort auch.
Danke und Gruß
Jens
Hi Stephan,
vielen Dank! Kann ich das „Exchange 2016: Umfangreiches Whitepaper zu Autodiscover“ auch auf Exchange 2013 anwenden?
Gruß
Jens
Hallo Jens,
ja, das meiste gilt auch für Exchange 2013.
Gruß,
Frank
Jens,
du musst die local dns namen auf öffentlich erreichbare FQDNs umstellen, schau dir mal das Autodiscover howto von Franky an, damit sollte das eigentlich klar werden.
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
Looks like it has something todo when there is already a certificate present.
Hi Franky,
Very nice script!
Getting following error when running on server 2016/exchange 2016
Exchange certificate is assigned and activated
Enable-ExchangeCertificate : A special Rpc error occurs on server C01: An unexpected error occurred while modifyin
g the forms authentication settings for path /LM/W3SVC/1. The error returned was 5506.
At C:\Install\CertificateAssistant.ps1:366 char:138
+ … ble:$true | Enable-ExchangeCertificate -Services „SMTP, IMAP, POP, II …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Enable-ExchangeCertificate], InvalidOperationException
+ FullyQualifiedErrorId : [Server=C01,RequestId=57360c4a-6deb-4319-8ab7-ba3178aa682e,TimeStamp=5/02/2018 10:2
6:16] [FailureCategory=Cmdlet-InvalidOperationException] D85212C5,Microsoft.Exchange.Management.SystemConfiguratio
nTasks.EnableExchangeCertificate
Checked IIS, picked the certificate manually and assigned services manually in exchange admin.
Everything seems to be working. There is also no friendly name on the cert.
Grtz
Pasqualino
Hi Patrick,
ich hab mir auch mal übers Wochenende einen Test Exchange 2016 CU8 installiert und bei mir passiert das gleiche. Ich bekomme viele Fehlermeldungen im Script und zum Schluss crasht es einfach. Ich hoffe Frank könnte das Script anpassen.
Danke!
Grüße
Erstmal vielen Dank für das geniale Script!
Leider crasht es bei mir und schliesst einfach die Powershell. Habe Windows Server 2016 und Exchange 2016 CU8 Version 15.1 (Build 1415.2) am laufen.
Kennt jemand das Problem und hat eine Lösung?
Ok, das kreist es ein:
((Get-MapiVirtualDirectory -Server $ExchangeServer).Internalurl.Host).ToLower()
schmeißt den lokalen internen fqdn des Exchange Servers raus!
((Get-MapiVirtualDirectory -Server $ExchangeServer).ExternalUrl.Host).ToLower()
Gibt eine Fehlermeldung „Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat
Das MAPI Verzeichnis ist mir bei der Konfiguration der Verzeichnisse (auch in der Anleitung hier auf der Seite) noch nie untergekommen. Gibt es irgendwo eine Info, wie man die URI dafür korrekt setzt?
Danke schonmal für die schnelle Rückmeldung!!
Hallo Achim,
MAPIoverHTTP gibt es seit Exchange 2013:
https://www.frankysweb.de/exchange-2013-mapioverhttp/
Gruß, Frank
Das werde ich mal testen, danke.
Der interne FQDN endet auf .local
Hallo Achim,
das kannst du ganz einfach im Skript selbst schauen, was er sich da automatisch holt.
Ab Zeile 91 findet du den entsprechenden Teil:
$ExchangeServer = (Get-ExchangeServer $env:computername).Name
[array]$CertNames += ((Get-ClientAccessServer -Identity $ExchangeServer).AutoDiscoverServiceInternalUri.Host).ToLower()
[array]$CertNames += ((Get-OutlookAnywhere -Server $ExchangeServer).ExternalHostname.Hostnamestring).ToLower()
[array]$CertNames += ((Get-OabVirtualDirectory -Server $ExchangeServer).Internalurl.Host).ToLower()
[array]$CertNames += ((Get-OabVirtualDirectory -Server $ExchangeServer).ExternalUrl.Host).ToLower()
[array]$CertNames += ((Get-ActiveSyncVirtualDirectory -Server $ExchangeServer).Internalurl.Host).ToLower()
[array]$CertNames += ((Get-ActiveSyncVirtualDirectory -Server $ExchangeServer).ExternalUrl.Host).ToLower()
[array]$CertNames += ((Get-WebServicesVirtualDirectory -Server $ExchangeServer).Internalurl.Host).ToLower()
[array]$CertNames += ((Get-WebServicesVirtualDirectory -Server $ExchangeServer).ExternalUrl.Host).ToLower()
[array]$CertNames += ((Get-EcpVirtualDirectory -Server $ExchangeServer).Internalurl.Host).ToLower()
[array]$CertNames += ((Get-EcpVirtualDirectory -Server $ExchangeServer).ExternalUrl.Host).ToLower()
[array]$CertNames += ((Get-OwaVirtualDirectory -Server $ExchangeServer).Internalurl.Host).ToLower()
[array]$CertNames += ((Get-OwaVirtualDirectory -Server $ExchangeServer).ExternalUrl.Host).ToLower()
if ($ExchangeVersion -match „Version 15“)
{
[array]$CertNames += ((Get-OutlookAnywhere -Server $ExchangeServer).Internalhostname.Hostnamestring).ToLower()
[array]$CertNames += ((Get-MapiVirtualDirectory -Server $ExchangeServer).Internalurl.Host).ToLower()
[array]$CertNames += ((Get-MapiVirtualDirectory -Server $ExchangeServer).ExternalUrl.Host).ToLower()
Jeweils den Teil ab „Get-…“ kannst du ja bei dir ausführen in der Shell, dann siehst du welche URL falsch konfiguriert ist. Alternativ kannst du auch die Zeile aus dem Skript entfernen, würde ich aber „pauschal“ erst mal nicht empfehlen ;)
LG Bernd
Moinsen,
ich teste gerade das Script auf unserem Server (Server 2012 R2 / Exchange 2013). Das ACMESharp Modul habe ich, wie in den Kommentaren zu lesen, manuell installiert. Das Script läuft durch, findet aber bei den DNS Namen neben dem korrekten FQDN des Exchange Servers und der Autodiscovery Adresse immer noch den internen FQDN des Servers, der sich ja nicht validieren lässt. Ich habe alle virtuellen Verzeichnisse korrekt konfiguriert, autodiscovery URI ist per EMS gesetzt. DNS ist konfiguriert, alle Adressen sind in- und extern zu erreichen. Woher bekommt das Script noch den internen Namen des Servers her? Ich habe alles durch, lediglich das virtuelle Verzeichnis für Powershell verweist auf diesen Namen, das soll aber laut Konfigurationanleitung für die Zertifikate auch so bleiben.
Wo könnte ich noch schauen?
Worauf endet der interne fqdn?
Hi!
Danke für den Tipp JensV! Ich bin weiter gekommen, habe aber das Ziel nicht erreicht. Folgender Output am ende:
Was könnte dies bedeuten? Danke vorab!
Let’s Encrypt IIS Verzeichnis auf HTTP umstellen…
Umstellung auf HTTP erfolgreich
DNS Namen durch Let’s Encrypt validieren lassen…
Validierung durchführen: Cert100120180950-1
Validierung durchführen: Cert100120180950-2
Validierung durchführen: Cert100120180950-3
Validierung durchführen: Cert100120180950-4
Validierung durchführen: Cert100120180950-5
30 Sekunden warten…
Prüfe ob die DNS-Namen validiert wurden…
Update Alias: Cert100120180950-1
Validierung OK
Update Alias: Cert100120180950-2
Validierung OK
Update Alias: Cert100120180950-3
Validierung OK
Update Alias: Cert100120180950-4
Validierung OK
Update Alias: Cert100120180950-5
Validierung OK
New-ACMECertificate : Das Argument kann nicht an den Parameter „IdentifierRef“ gebunden werden, da es NULL ist.
In C:\CERT\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:\CERT\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:\CERT\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:\CERT\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
Hallo Frank,
Ja das mit dem PSremote ist für mich leider komplettes Neuland und da ich keine Ausgewachsene Testumgebung habe könnte ich die OP nur am Offenen Herzen durführen…
Wäre toll wenn ihr mir wenigstens ein wenig helfen könntet..
MFG Sven
Guten Tag,
Ich habe einen Exchange 2016 hinter einem Essential Server 2016 geschaltet mit einem Reserv-Proxy von Mircosoft.
Nun meine Frage, kann man das Script auch erweitern, das es das Zertifikat auch auf eine Freigabe exportiert, damit ich auf den Essentialserver dann dieses Zertifikat in die Webfarm (den Proxy) importieren kann?
Mein Powershell programmierkünste sind leider nicht so groß..
MFG Sven
Hallo Sven,
ja, das ist mit ein paar Anpassungen am Script durchaus möglich. Das wäre ein guter Einstieg um sich näher mit der PowerShell zu befassen. Das Zertifikat liegt ja schon exportiert vor, du kannst das Script erweitern und auf den Zielserver kopieren. Mit PSRemoting könntest du es dann auch direkt der Farm zuweisen.
Gruß,
Frank
@MarkusS
Hallo zusammen,
hatte das gleiche Problem wie oben beschrieben, nach etwas suchen habe ich dann festgestellt, das zwei ACMESharp Versionen installiert waren. Habe alle ACMESharp Module entfernt und wieder die 0.8.1 installiert. Danach lief alles wieder wie gewünscht.
Hier mal kurz die benötigten Befehle um das Problem zu verifizieren und zu lösen.
1. Anzeige der installierten Module mit: Get-Module –ListAvailable
2. Entfernen der ACMESharp Module: Uninstall-Module ACMESharp
3. Installation der benötigten ACMESharp Version 0.8.1: Install-Module -Name ACMESharp -RequiredVersion 0.8.1
Grüße Jens
Hallo!
Ich versuche seit 2 Tagen es zum laufen zu bringen, es kommen bei mir einige Fehler. Ich habe einen neuen Exchange 2016 Server auf Windows 2016 installiert.
Bitte um Hilfe, und danke für jeden der sich Zeit nimmt!
Folgende Logs:
Certificate Assistant v1.1
Automatische Let’s Encrypt Zertifikate für Exchange 2010/2013/2016
Frank Zoechling (www.FrankysWeb.de)
—————————————————————-
Lade ACMESharp Modul…
Lade IIS Webadministration Modul…
Lade Exchange Management Shell…
Exchange Server 2013/2016 wurde erkannt
Lese Exchange Konfiguration…
WARNUNG: Das Cmdlet „Get-ClientAccessServer“ wird in einer künftigen Version von Exchange entfernt. Verwenden Sie stattdessen das Cmdlet „Get-ClientAccessService“. Wenn in Skripts das Cmdlet „Get-ClientAccessServer“ verwendet wird, aktualisieren Sie die Skripts, sodass
sie das Cmdlet „Get-ClientAccessService“ verwenden. Weitere Informationen finden Sie unter „http://go.microsoft.com/fwlink/p/?LinkId=254711“.
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\CERT\CertificateAssistant.ps1:93 Zeichen:4
+ [array]$CertNames += ((Get-OutlookAnywhere -Server $ExchangeServer …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\CERT\CertificateAssistant.ps1:95 Zeichen:4
+ [array]$CertNames += ((Get-OabVirtualDirectory -Server $ExchangeSe …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\CERT\CertificateAssistant.ps1:97 Zeichen:4
+ [array]$CertNames += ((Get-ActiveSyncVirtualDirectory -Server $Exc …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\CERT\CertificateAssistant.ps1:99 Zeichen:4
+ [array]$CertNames += ((Get-WebServicesVirtualDirectory -Server $Ex …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\CERT\CertificateAssistant.ps1:101 Zeichen:4
+ [array]$CertNames += ((Get-EcpVirtualDirectory -Server $ExchangeSe …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\CERT\CertificateAssistant.ps1:103 Zeichen:4
+ [array]$CertNames += ((Get-OwaVirtualDirectory -Server $ExchangeSe …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\CERT\CertificateAssistant.ps1:108 Zeichen:5
+ [array]$CertNames += ((Get-MapiVirtualDirectory -Server $Exchange …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
—————————————————————-
Die folgenden DNS-Namen wurden gefunden:
DNS: mail.***.***.net
————————
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:\CERT\CertificateAssistant.ps1:259 Zeichen:3
+ $CertSubject = ((Get-OutlookAnywhere -Server $ExchangeServer).Exter …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Neuer Identifier:
DNS: mail.***.***.net
Alias: Cert291120171014-1
Validierung vorbereiten:
Alias Cert291120171014-1
Complete-ACMEChallenge : the given identifier was not found in the registry
In C:\CERT\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
Let’s Encrypt IIS Verzeichnis auf HTTP umstellen…
Umstellung auf HTTP erfolgreich
DNS Namen durch Let’s Encrypt validieren lassen…
Validierung durchführen: Cert291120171014-1
Submit-ACMEChallenge : challenge has not been decoded
In C:\CERT\CertificateAssistant.ps1:297 Zeichen:17
+ … $Validate = Submit-ACMEChallenge $ACMEAlias -ChallengeType http-01
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Submit-ACMEChallenge], InvalidOperationException
+ FullyQualifiedErrorId : System.InvalidOperationException,ACMESharp.POSH.SubmitChallenge
30 Sekunden warten…
Prüfe ob die DNS-Namen validiert wurden…
Update Alias: Cert291120171014-1
Fehler: Validierung für Alias Cert291120171014-1 fehlgeschlagen
Hallo,
ich bin dem Problem etwas näher gekommen. Das Script setzt auf allen Seiten SSL erforderlich auf ein. Somit funktioniert meine Umleitung bzw. der Redirect von HTTP auf HTTPS nicht mehr. Gibt es eine Möglichkeit das abzustellen? Bzw. nachträglich wieder umzustellen?
Hat jemand einen Tipp?
Gruß und Danke!
Hallo,
ich würde das Script gerne einsetzen. Jedoch möchte ich gerne ein Redirect von HTTP auf HTTPS haben. Gibt es da Probleme dann mit der automatischen Erneuerung? Ich habe es wie folgt eingerichtet:
http://msexchangeguru.com/2016/08/31/e2016-http-to-https-redirection/
Löscht das Script auch bei einem automatischen Renew das alte Zertifikat weg?
Gruß und Danke für jede Hilfe!
Hallo nochmal,
vergesst die Frage bitte, nach einigem Debuggen habe ich festgestellt, dass isch das Skript beentdete nach der Validierung – es ist lediglich „exit“ zu lesen, von daher dachte ich, es wäre fertig – mittlerweile bin ich einen Schritt weiter, jetzt muss ic hauf die DNS-Server des IoT warten ;-) …
mfg
CK
Hallo zusammen,
vielen Dank für für das wunderbare Skript, es funktioniert wirklich hervorragend und fast problemlos – vielen Dank auch an meine Vor-Kommentatoren für folgenden Tipp:
Uninstall-Module ACMESharp
und
Install-Module -Name ACMESharp -RequiredVersion 0.8.1 -AllowClobber
bei dem Fehler :
Complete-ACMEChallenge : the given identifier was not found in the registry
Ich habe als BS Server 2016 und Ex2016
Nun noch einige Anregungen:
Ich hatte das Skript umbenannt, deswegen funktionierte die im Skript angelegte Aufgabe leider nicht – könnte das noch eventuell für zukünftige Einsätze geändert werden? M.E. müsste ein hartcodierter Dateiname dynamisch veränderbar gemacht werden – ohne das skript näher betrachtet zu haben.
Letztendlich noch eine Frage, die mir fast schon unangenehm ist:
Ich hatte gedacht, dass das Skript mein bestehendes selbstsigniertes Zertifikat (entstanden durch die Exchangeserver-Installation) ändert bzw. ersetzt – leider sind die Exchangeserver-Zertifikatseinstellungen im Exchange Admin Center unberührt – habe ich eventuell einen wichtigen Schritt vergessen?
Vielen Dank für eure Antworten!
mfg
CK
Hallo Frank, tausendundeins Dank für diese wunderbare Skript.
Wir haben vor kurzem von Exchange 2010 und 2013 auf 2016 migriert und bisher immer mit selbst ausgestellten Zertifikaten rum gehampelt.
Ich hatte keinerlei Probleme mit dem Skript, es hat auf Anhieb funktioniert.
Wir nutzen Exchange 2016 CU7, installiert auf einem Windows Server 2016.
Spende folgt! :-)
Gruß,
Dominik
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….“
Nach einmaligem Klicken von „akzeptieren des Zertifikats“ läuft Outlook einwandfrei. Mobile Geräte haben kein Problem. Nur eben Outlook.
Hat jemand noch eine Idee wo die „.local“ Domain versteckt sein könnte ?
In den exchange virtual directorys
Funzt!
@Manu (vom 21. September):
Sorry hatte kurze Pause.
Im IIS war bei mir in der Ebene ‚Default Web Site‘ (Startseite), rechts MIME-Typ öffnen der Eintrag ‚.‘ text/plain vorhanden, was bedeutet, das Dateien OHNE Endung durch den MIME-Typ Text/plain geöffnet werden können. Dieser wurde nach unten vererbt, was bedeutet, das im Verzeichnis acme-challenge ebenfalls dieser Eintrag vorhanden ist.
Durch das Script wird nun im Verzeichnis C:\inetpub\wwwroot\.well-known\acme-challenge automatisch eine Datei web.config erstellt. Diese wiederum gibt dem IIS als XML-File ‚den Auftrag‘ Dateien ‚ohne Endung dem MIME-Typ text/json zuzuweisen.
Da die Dateien ohne Endung jedoch bereits eine Zuweisung durch den IIS erhalten haben, gibts eine Fehlermeldung bzw. die Validierung schlägt fehl, weil es ein Konflikt gibt beim Versuch eine Datei ohne Endung aufzurufen (beim Versuch die Datei von extern für die Validierung aufzurufen).
Anfangs hatte ich diese Datei web.config während der Laufzeit des Scriptes von Hand gleich gelöscht und dann lief das Script durch. Deshalb war meine Frage, wie ich diese Erstellung der web.config verhindern kann.
Konnte es jedoch nun durch ‚korrekte?!? (- jedenfalls funktioniert es) Konfiguration des IIS lösen.
Der Eintrag der Zuweisung für Dateien Ohne Endung war in meinem acme-challenge verzeichnis vorhanden wurde vererbt durch die ‚root‘ also Default Web Seite.
Deshalb hab ich dort diese MIME-Typ eintrag einfach gelöscht.
Im acme-challenge musst Du aber nichts erstellen und Du wirst feststellen, dass dieser Eintrag ‚.‘ (ohne Dateiendnung) nicht vorhanden ist. Sobald aber das script durchläuft und die Datei web.config im acme-challenge Verzeichnis erstellt wurde, wirst Du feststellen, das auch der eintrag ‚.‘ unter MIME-Typ wieder vorhanden ist…
Hoffe es hilft Dir weiter…
Hallo liebe Gemeinde,
ich habe ein Problem, mit meinem IIS lässt die Überprüfung/Validierung der Let’s Encrypt Schlüssel, durch das Script (in den IIS Ordnern nicht zu). Es sieht aus als wenn nur Port 80 umgeleitet wird auf 443 für das OWA Verzeichnis, jedoch die weiteren Verzeichnisse komplett ignoriert werden. Besonders das /.well-known/acme-challange/ Verzeichnis.
Habe das sellbe Problem wie Jaroslav
Server 2012R2 + Exchange 2013 CU17.
Let’s Encrypt IIS Verzeichnis auf HTTP umstellen…
Umstellung auf HTTP erfolgreich
DNS Namen durch Let’s Encrypt validieren lassen…
Validierung durchführen: Cert161020171149-1
Submit-ACMEChallenge : challenge has not been decoded
In C:\Cer\CertificateAssistant.ps1:297 Zeichen:17
+ … $Validate = Submit-ACMEChallenge $ACMEAlias -ChallengeType http-01
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Submit-ACMEChallenge], InvalidOperationException
+ FullyQualifiedErrorId : System.InvalidOperationException,ACMESharp.POSH.SubmitChallenge
Validierung durchführen: Cert161020171149-2
Submit-ACMEChallenge : challenge has not been decoded
In C:\Cer\CertificateAssistant.ps1:297 Zeichen:17
+ … $Validate = Submit-ACMEChallenge $ACMEAlias -ChallengeType http-01
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Submit-ACMEChallenge], InvalidOperationException
+ FullyQualifiedErrorId : System.InvalidOperationException,ACMESharp.POSH.SubmitChallenge
30 Sekunden warten…
Prüfe ob die DNS-Namen validiert wurden…
Update Alias: Cert161020171149-1
Fehler: Validierung für Alias Cert161020171149-1 fehlgeschlagen
Wir haben ebenfalls SRV 2012 und Ex2013 im Einsatz. Aber eben, bei mir kommt noch Fehler „Validierung für Alias Cert210920170344-1 fehlgeschlagen“… Jemand eine Idee, wo es klemmt?
Funktioniert auf SRV 2012 und Ex2013 perfekt!
@Reto
Ich bekomme ebenfalls die selbe Fehlermeldung wie du (Validierung für Alias Cert210920170344-1 fehlgeschlagen).
Deine Lösung bezüglich MIME Registration des ‚.‘ zu text/plain und übernahme von Default Web Site verstehe ich allerdings nicht. Kannst du hier noch ein paar mehr Angaben geben? Bzw, WO genau das ‚.‘ zu text/plain zu entfernen ist… sollte es dann am gleichen liegen. Danke.
Erst mal vielen Dank für dieses tolle Script, es funktioniert auch einwandfrei.
Allerdings erhalte ich bei mehreren Windows SBS2011 Servern (Exchange2010, Win2008R2) folgende Fehlermeldung:
————————————————————————————————-
Get-ChildItem : Fehler beim Auflisten der SSL-Bindungen. Fehlercode: 234.
In C:\CertificateAssistant.ps1:373 Zeichen:29
+ $CurrentCertThumbprint = (Get-ChildItem -Path IIS:SSLBindings | where {$_.port …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-ChildItem], ProviderException
+ FullyQualifiedErrorId : Microsoft.IIs.PowerShell.Framework.ProviderException,Microsoft.PowerShell.Commands.GetCh
ildItemCommand
Aktivierung ist fehlgeschlagen
————————————————————————————————-
Die Aktivierung und die Zuweisung funktioniert allerdings einwandfrei.
Gelöst: @Stephan Danke!
Das Problem lag an der offenbar doppelten MIME Registration des ‚.‘ zu text/plain.
In meinem IIS war in den MIME-Typ Erweiterung bereits der Eintrag zu ‚.‘ text/plain vorhanden (neben ganz vielen anderen… Das Löschen im Verzeichnis acme-challenge ging nicht da dieser Vererbt war von der Hauptebene aus ‚Default-Web-Site‘. Das Entfernen dieser MIME-Typ Registration ‚.‘ in dieser Ebene lässt danach den Zugriff auf das acme-challenge Verzeichnis trotz web.config Files zu.
Das Script kann nun ohne ‚Dazwischenfunken durch mich‘ erfolgreich abgeschlossen werden.
Hoffe nur das das Löschen des Eintrages keine Auswirkungen auf sonst eine Seite hat :-)
Das leuchtet mir nicht ein. Hab gerade nochmals einen Versuch gestartet:
Während dem Scriptablauf nach der Meldung: ‚Umstellung auf HTTP erfolgreich‘ hab ich die Datei web.config im Verzeichnis acme-challenge gelöscht und siehe da ALLE Validerungen liefen ohne Fehlermeldungen durch, das Zertifikat wird erstellt und diesmal sogar korrekt im IIS installiert. (Script ohne Fehlermeldung abgelaufen). Geht aber nur wenn ich die web.config die erstellt wird im richtigen Moment lösche…
Das hat doch mit dem Verzeichniszugriff zu tun und nicht mit der Namensauflösung?
Wenn es dann geht, muss irgendwas in deinen IIS EInstellungen nicht passen, die den Zugriff in Verbindung mit der Configdateie verhindert.
Nun, das Script ist sicher genial und dafür Danke ich ihm auch!
Trotzdem hab ichs noch nicht fertig zum laufen gebracht.
Der gleiche Fehler hat Torsten am 29. August 2017 um 08:49 gepostet (weiter oben). muss ihn ja nicht mehr reinkopieren. Und der Hinweis auf den Port 80 (nach der Meldung) hat mich dann auf den Umstand gebracht, dass ich in nur dieses eine Verzeichnis acme-challenge über Port 80 keinen Zugriff hatte. Und nach langer Sonntagsarbeit bemerkt, dass dieses durch das dortige web.config File gesperrt wird. Einfach Löschen bringt nichts, da dieses während des Scriptes erstellt wird. Also komm ich nun zur Frage: Wie kann ich das automatische Erstellen dieses Files stoppen… :)
Denn wenn das File nicht im Verzeichnis ist (löschung der Datei während des Scriptsablaufes) können die LetsEnscript Validierungen durchgeführt und das Script erstellt werden… (sogar bei meiner Maschine…)
Es liegt definitiv nicht an der web.config, die gehört da rein.
Dann kann er einen Domänennamen nicht auf das IIS Verzeichnis auflösen, wenn das der selbe Fehler ist.
Sorry nicht Domänennamen sondern cnames natürlich. und ja die sind alle im selben iis.
Im selben iis ist klar, es sind doch aber andere Webseiten in dem iis in anderen Verzeichnissen oder?
Nein auf der Exchangemaschine läuft nur der Exchange im IIS mit zwei Domainnamen.
webmail.domain1.com
autodiscover.domain1.com
autodiscover.domain2.com
Exchange.domain1.com
mail.domain1.com
Das Zertifikt so läuft ja, halt über die manuelle Erstellung über https://www.sslforfree.com/ und da wird ja auch das ACME Tool benötigt und ins gleiche .well-known\acme-challenge Verzeichnis gelegt.
Möchte dies nun halt automatisieren steh aber noch irgendwie auf dem Schlauch…
Deshalb:
– wo und warum wird dieses web.config im Script erstellt?
– und warum kann bei mir das neue Zertifikat nicht allen Diensten zugleich zugeordnet werden? (ist im Script ja so vorkonfiguriert)
Franky hat doch in so geniales Script geschrieben.
Da kommen doch Meldungen was nicht funktioniert.
Poste doch mal die Fehler.
Bin der Lösung schon näher:
@Stephan: Danke für den Tip: Auf der Default Web Site hab ich den SSL aktiviert, jedoch im acme-challenge Verzeichnis (im IIS) ist das SSL deaktiviert.
Hab nun folgendes festgestellt:
Blockiert wird der Zugriff in das acme-challenge Verzeichnis, weil dort eine Datei web.config liegt. wird diese gelöscht funktioniert der Zugriff und damit der Abruf der textdateien wieder.
Das Problem: Die web.config wird während der Laufzeit des CertificateAssistant.ps1 Scripts erstellt. Lösche ich die Datei web.config nachdem meine 5 Domainnamen durch sind und bevor es zur Validierung kommt, läuft das script weiter und ein Zertifikat wird erstellt und ‚teils‘ installiert.
Leider bricht dann das Script wegen eines weiteren Fehlers ab: beim Enable-ExchangeCertificate kann er das Zertifikat nicht allen Diensten zuordnen. Manuelles Zuordnen des Zertifikates in den Bindungen (IIS) geht dann wieder.
Trotzdem bleiben für mich ungeklärte Fragen:
– Warum wird ein web.config automatisch erstellt? Und wie kann dies deaktiviert werden?
– Warum kann das neue Zertifikat nicht automatisch allen Diensten SMTP, IMAP, POP und IIS zugeordnet werden?
5 Domänennamen? Zeigen die alle auf die selbe Webseite?
Ich habe noch mehrere cnames. Da habe ich hardlinks zum challenge ordner erstellt, dann ging es bei mir.
Ob dort SSL aktiv ist. Das war oben war mein Sonntagsdeutsch…
Hallo
@Torsten: Hab das gleiche Problem des Validierungsfehlers… Welchen Schritt hast du überlesen? vieleicht hilfts mir ja auch :-) Besten Dank!!
Reto, das Port 80 auf sein muss?
Danke Stephan, bin dem Problem auf der Spur.
Port 80 ist offen, hab jedoch bemerkt, dass ich über einen externen Zugriff nichts im Verzeichnis acme-challenge lesen kann, sprich die generierte Textdatei nicht aufgerufen werden kann. Benenne ich das Verzeichnis acme-challenge in z.B. acme-challengeold um dann funktioniert der Zugriff.
Habt jemand eine Idee?
Schau mal im IIS auf dem Challenge Verzeichnis, ob der ein SSL aktiv ist oder nicht. Wird je nach Einstellung vererbt.
Hi,
in welchem Turnus müsste das Skript die Zertifikate denn automatisch aktualisieren (ich stehe in 27 Tagen davor, dachte allerdings <30 wird bei Letsencrypt aktualisiert?). Oder muss dafür das Skript angepasst werden?
Umgebung S2016/EX2016.
Danke im Voraus,
VG,
Chris
Hi,
wie im Artikel beschrieben:
Die Aufgabe startet jeden Tag um 23:00 Uhr und erneuert das Zertifikat 4 Tage vor Ablauf.
Gruß, Frank
Hallo,
mir ist das vorgehen auf einem 2008 R2 Server und Exchange 2013 noch nicht ganz klar, das script benötigt WMF5, dann funktioniert aber die Management Konsole von Exchange 2013 nicht mehr.
Was muss ich jetzt genau machen?
Gruß
Torsten
Habs hinbekommen, hatte einen Schritt überlesen und schon gings….
Hallo,
bei schlägt bei Update Alias immer die Validierung für die interne Adresse fehl:
—————————————————————————
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…
Neuer Identifier:
DNS: autodiscover.web.de
Alias: Cert290820170843-1
Validierung vorbereiten:
Alias Cert290820170843-1
Neuer Identifier:
DNS: mail.web.de
Alias: Cert290820170843-2
Validierung vorbereiten:
Alias Cert290820170843-2
Neuer Identifier:
DNS: mail.int.web.de
Alias: Cert290820170843-3
Validierung vorbereiten:
Alias Cert290820170843-3
Let’s Encrypt IIS Verzeichnis auf HTTP umstellen…
Umstellung auf HTTP erfolgreich
DNS Namen durch Let’s Encrypt validieren lassen…
Validierung durchführen: Cert290820170843-1
Validierung durchführen: Cert290820170843-2
Validierung durchführen: Cert290820170843-3
30 Sekunden warten…
Prüfe ob die DNS-Namen validiert wurden…
Update Alias: Cert290820170843-1
Validierung OK
Update Alias: Cert290820170843-2
Validierung OK
Update Alias: Cert290820170843-3
Fehler: Validierung für Alias Cert290820170843-3 fehlgeschlagen
Kann mir jemand sagen warum?
Gruß
Torsten
Hab das gleiche Problem wie Reto und Volker,
wie habt Ihr das gelöst ?
Danke für Rückmeldung
Grüße
Sunny
In meiner Windows 2016 / Exchange 2016 Umgebung hat das Skript auf anhieb funktioniert, perfekt.
Einmal noch auf ie Firewall kopieren – fertig.
Vielen Dank dafür Frank!
Da in der aktuellen ACMESHarp Version (0.8.5.313) die IIS Handler teilweise nicht funktionieren, hilft es die Version 0.8.1 manuell zu installieren:
Install-Module -Name ACMESharp -RequiredVersion 0.8.1 -AllowClobber
Eine eventuell schon vorhandene neuere Version mit
Uninstall-Module ACMESharp
deinstallieren.
Bug Report zum IIS Handler:
https://github.com/ebekker/ACMESharp/issues/245
hi,
anscheinend wurde aus dem ACME Plugin der IIS Teil entfernt, dadurch funktioniert das Complete-ACMEChallenge nicht mehr.
Validierung vorbereiten:
Alias Cert09082017-1
Complete-ACMEChallenge : the given identifier was not found in the registry
At C:\CertificateAssistant\CertificateAssistant.ps1:273 char:20
+ … lidateReq = Complete-ACMEChallenge $ACMEAlias -ChallengeType http-01 …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Complete-ACMEChallenge], KeyNotFoundException
+ FullyQualifiedErrorId : System.Collections.Generic.KeyNotFoundException,ACMESharp.POSH.CompleteChallenge
sg Philipp
Da die Frage immer wieder kommt, weshalb der Fehler „New-ACMEIdentifier : Ein Element mit dem gleichen Schlüssel wurde bereits hinzugefügt.“ auftaucht hier ein kurzer „Workaround“, welcher sich jedem der sich den Code des Skripts kurz angesehen hat schnell einfallen sollte.
Das Skript erstellt Identifier, welche für das lokale System einmalig sein müssen und zur eindeutigen Zuordnung der Zertifikatsabfrage an die Let’s Encrypt Server verwendet werden. Frank hat dabei das folgende Format gewählt „Cert“ + Tag + Monat + Jahr + „-“ + DomainName. Hat man bereits einmal das Skript am selben Tag ausgeführt, so tritt natürlich bei der zweiten Ausführung der besagte Fehler auf. Ich behelfe mir hierbei dabei, dass ich das Format noch um Stunde und Minute erweitere. Hierzu einfach das Skript öffnen und nach dem ersten vorkommen von „Alias“ suchen. In dieser Zeile an das Ende von ddMMyyyy noch ein hhmm hinzufügen: ddMMyyyyhhmm. Danach geht es. Sobald eure anfängliche Generierung erfolgreich war solltet ihr dies wieder entfernen, bspw. bei der automatischen Erneuerung verwendet das Skript noch an anderer Stelle das Format ohne Stunde und Minute, ihr könnt dies natürlich aber auch an entsprechender Stelle anpassen. Viel Erfolg!
Meine Probleme mit den CNAMES bzw. weiteren Websites auf dem IIS habe ich gelöst, indem ich aus dem inetpub\wwwroot\ Ordner harte Verknüpfungen in den anderen Websites auf .well-kown gelegt habe.
Damit kann man dann mehrere Websites mit den Zertifikaten versehen und diese bekommen dann automatisch das Let’s Encrypt Zertifikat zugewiesen.
Hallo Franky,
das Script läuft nun bei mir einwandfrei unter Server 2012R2 und Exchange 2013.
Eine Frage hab ich aber noch: Hast du geplant das Script auf tls-sni-01 umzustellen, sodass man Port 443 statt Port 80 nehmen kann? So müsste nicht Port 80 von Extern offen sein.
Oder hatte es bestimmte Gründe das du dich für http-01 entschieden hast?
LG Bernd
Hi Bernd,
ich plane das Script zu überarbeiten, dabei werde ich auch tls-sni-01 berücksichtigen.
Gruß, Frank
Fabian,
wenn du Server2012R2 hast, dann solltest du nicht unbedingt die Powershell 5 installieren.
Installier lieber die PowerShell Gallery ( https://www.powershellgallery.com ) und anschließend kannst du mit dem Script auch das ACME Modul installieren lassen.
LG Bernd
Fabian, du hast noch nicht die Powershell 5 installiert.
Ich bekomme mit Windows-Server 2012r2 leider folgende Fehlermeldung:
***
Lade ACMESharp Modul…
Warnung: ACME Sharp Module nicht gefunden
Versuche ACMESharp Modul zu installieren…
Install-Module : Die Benennung „Install-Module“ wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei
oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist
(sofern enthalten), und wiederholen Sie den Vorgang.
In C:\Temp\CertificateAssistant.ps1:38 Zeichen:4
+ Install-Module -Name ACMESharp
+ ~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Install-Module:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Fehler: ACME Sharp Modul konnte nicht installiert werden
***
Was kann ich tun?
Viele Grüße
Fabian
Ich habe auf einem Exchange Server auch noch weitere Virtualdirectorys,
wenn ich dazu auch noch passende DNS Namen registrieren möchte kommt folgende Meldung:
New-ACMEIdentifier : Ein Element mit dem gleichen Schlüssel wurde bereits hinzugefügt.
In C:\ssl\CertificateAssistant.ps1:270 Zeichen:14
Die Websites habe ich auch über Port 80 von außerhalb erreichbar gemacht.
Hast du eine Idee, woran dies liegen kann?
Okay, nur bei manuellem Aufruf, hat sich erledigt.
Bei mir kommt bei jedem start die Abfrage ob weitere DNS Namen, E-Mail Adresse, automatische Erneuerung, Windows Credentials und ob die Konfiguration gestartet werden soll.
Wie wird das in der Aufgabenplanung umgangen?
Mfg
Stephan
Hallo Franky,
ich hab das Script soweit erfolgreich auf einem Server2012R mit EXS13 eingerichtet.
Beim ersten Testlauf war allerdings noch nicht der Port 80 am Router weitergeleitet.
Nun kommt bei jeden Lauf des Script ein Fehler und die Zertifikate sind nicht vorhanden.
Wie bekommt man das nun zum Laufen?
—————————————————————————
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…
Neuer Identifier:
DNS: autodiscover.domain.de
Alias: Cert04072017-1
New-ACMEIdentifier : Ein Element mit dem gleichen Schlüssel wurde bereits hinzugefügt.
In C:\BF\CertificateAssistant.ps1:270 Zeichen:14
+ $NewID = New-ACMEIdentifier -Dns $ExchangeSAN -Alias $ACMEAlias
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [New-ACMEIdentifier], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException,ACMESharp.POSH.NewIdentifier
Validierung vorbereiten:
Alias Cert04072017-1
Neuer Identifier:
DNS: mail.domain.de
Alias: Cert04072017-2
New-ACMEIdentifier : Ein Element mit dem gleichen Schlüssel wurde bereits hinzugefügt.
In C:\BF\CertificateAssistant.ps1:270 Zeichen:14
+ $NewID = New-ACMEIdentifier -Dns $ExchangeSAN -Alias $ACMEAlias
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [New-ACMEIdentifier], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException,ACMESharp.POSH.NewIdentifier
Validierung vorbereiten:
Alias Cert04072017-2
Neuer Identifier:
DNS: sf-exs-01.domain.de
Alias: Cert04072017-3
New-ACMEIdentifier : Ein Element mit dem gleichen Schlüssel wurde bereits hinzugefügt.
In C:\BF\CertificateAssistant.ps1:270 Zeichen:14
+ $NewID = New-ACMEIdentifier -Dns $ExchangeSAN -Alias $ACMEAlias
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [New-ACMEIdentifier], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException,ACMESharp.POSH.NewIdentifier
Validierung vorbereiten:
Alias Cert04072017-3
Neuer Identifier:
DNS: remote.domain.de
Alias: Cert04072017-4
New-ACMEIdentifier : Ein Element mit dem gleichen Schlüssel wurde bereits hinzugefügt.
In C:\BF\CertificateAssistant.ps1:270 Zeichen:14
+ $NewID = New-ACMEIdentifier -Dns $ExchangeSAN -Alias $ACMEAlias
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [New-ACMEIdentifier], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException,ACMESharp.POSH.NewIdentifier
Validierung vorbereiten:
Alias Cert04072017-4
Let’s Encrypt IIS Verzeichnis auf HTTP umstellen…
Umstellung auf HTTP erfolgreich
DNS Namen durch Let’s Encrypt validieren lassen…
Validierung durchführen: Cert04072017-1
Submit-ACMEChallenge : challenge has not been decoded
In C:\BF\CertificateAssistant.ps1:297 Zeichen:17
+ $Validate = Submit-ACMEChallenge $ACMEAlias -ChallengeType http-01
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Submit-ACMEChallenge], InvalidOperationException
+ FullyQualifiedErrorId : System.InvalidOperationException,ACMESharp.POSH.SubmitChallenge
Validierung durchführen: Cert04072017-2
Submit-ACMEChallenge : Unable to update challenge :: The challenge is not pending.
In C:\BF\CertificateAssistant.ps1:297 Zeichen:17
+ $Validate = Submit-ACMEChallenge $ACMEAlias -ChallengeType http-01
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (ACMESharp.Vault.Model.IdentifierInfo:IdentifierInfo) [Submit-ACMEChallenge
], AcmeWebException
+ FullyQualifiedErrorId : urn:acme:error:malformed (400),ACMESharp.POSH.SubmitChallenge
Validierung durchführen: Cert04072017-3
Submit-ACMEChallenge : Unable to update challenge :: The challenge is not pending.
In C:\BF\CertificateAssistant.ps1:297 Zeichen:17
+ $Validate = Submit-ACMEChallenge $ACMEAlias -ChallengeType http-01
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (ACMESharp.Vault.Model.IdentifierInfo:IdentifierInfo) [Submit-ACMEChallenge
], AcmeWebException
+ FullyQualifiedErrorId : urn:acme:error:malformed (400),ACMESharp.POSH.SubmitChallenge
Validierung durchführen: Cert04072017-4
30 Sekunden warten…
Prüfe ob die DNS-Namen validiert wurden…
Update Alias: Cert04072017-1
Fehler: Validierung für Alias Cert04072017-1 fehlgeschlagen
Hallo,
super Script. Kürzlich wurde die erste Erneuerung durchgeführt. In meinem Exchange 2016 ECP wird nun angezeigt, dass das Zertifikat abgelaufen ist und damit ist das alte gemeint. Sollte dies nicht automatisch entfernt werden? Es läuft offensichtlich alles mit dem neuen, aber dennoch stört mich der Hinweis und das noch aufgeführte abgelaufene Zertifikat.
Hi,
das Script löscht die alten Zertifikate nicht, das wäre ein Punkt für das nächste Update :-)
Danke für den Hinweis.
Gruß,
Frank
Hi Frank,
leider funktioniert die Installation mit Server 2016 und Exchange 2016 nicht korrekt. Fehlermeldung andauernd nur mit allowClobber wegen doppeltem get-certificate. Hast du einen Tipp, wie dies zu lösen ist?
Danke im Voraus
Hi Chris,
du kannst das ACMESharp Modul separat mit installieren:
Install-Module -Name ACMESharp -AllowClobber
Gruß, Frank
Hi Frank,
klappt, danke!
Hallo,
es funktioniert soweit, aber nach den Import in Exchange 2016 gibt es kein Anzeigename.
Ich weiß nicht ob es damit zusammenhängt, aber mein Thunderbird was per IMAP zugreift,
bekommt kurz eine Verbindung, die gleich wieder beendet wird (telnet dito)
Ich habe nur 1 DNS Namen (remote.xxx.de)
Moin. Erstmal vielen Dank für die Mühe.
Das macht es doch einfacher :)
Was mir aufgefallen ist, nur am Rande, du nimmst beim Exchange 2016 noch den Befehl Get-ClientAccessServer.
Er warnt halt, das der Befehl nicht mehr der aktuelle ist.
BTW: Ich hänge auch hinter der WAF. Hier habe ich mir eine NAT Regel eingerichtet und diese Schalte ich bei Bedarf kurz ein und dann wieder aus. Ist zwar ein Schritt mehr, aber leider nicht anders Regelbar.
PS: Ich habe nicht alle Kommentare gelesen.
Ergänzung:
Wenn ich im Powershell den Befehl Get-ACMEIdentifier Cert22062017-1 eingebe erhalte ich einen Status invalid?!?
IdentifierPart : ACMESharp.Messages.IdentifierPart
IdentifierType : dns
Identifier : webmail.domain.com
Uri : https://acme-v01.api.letsencrypt.org/acme/authz/tX6KjogZSMkgGhVtXHVXXXXXXAc2hWRiVql53x4Rpcr
Status : invalid
Expires : 29.06.2017 17:35:07
Challenges : {, , }
Combinations : {1, 2, 0}
Ich habe das gleiche Problem wie Volker.
Das Script geht ohne Fehler bis:
Umstellung auf HTTP erfolgreich
DNS Namen durch Let’s Encrypt validieren lassen…
Validierung durchführen: Cert22062017-1
Validierung durchführen: Cert22062017-2
Validierung durchführen: Cert22062017-3
Validierung durchführen: Cert22062017-4
Validierung durchführen: Cert22062017-5
30 Sekunden warten…
Prüfe ob die DNS-Namen validiert wurden…
Update Alias: Cert22062017-1
Fehler: Validierung für Alias Cert22062017-1 fehlgeschlagen
Hab schon mehrmals die automatisch erstellen Files auf dem Webserver im acme-challenge gelöscht sowie das sysVault Verzeichnis im C:\ProgramData\ACMESharp und das Script neu gestartet.
komme immer wieder an gleicher Stelle zum stehen. Mein System (Win2012R2 mit Exch2013 & Powershell 5.0)
Hallo Franky – hallo @ll,
eine super Anleitung – eigentlich hat alles geklappt… aber nach dem ich fertig war, hatte ich einen OWA Redirect Loop
Wenn ich die alten Zertifikate wieder an die Dienste binde, ist alles wieder schön….
Hatte jemand dieses Verhalten schon mal ?
Viele Grüße Jens
Hallo Frank,
Vielen Dankt für das Skript. Bei mir funktionier bis zum Punkt, prüfen ob die DNS-Namen validiert wurde sind alles wunderbar, nur leider dies nicht Gibt es i.wo Logs zum herauszufinden warum die Prüfung fehlschlägt?
Gruß
Moritz
—————————————————————————
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…
Neuer Identifier:
DNS: hoex01dc1msg01.hoex01.coseon.com
Alias: Cert14062017-1
New-ACMEIdentifier : Ein Element mit dem gleichen Schlüssel wurde bereits hinzugefügt.
In C:\ssl\CertificateAssistant.ps1:270 Zeichen:14
+ $NewID = New-ACMEIdentifier -Dns $ExchangeSAN -Alias $ACMEAlias
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [New-ACMEIdentifier], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException,ACMESharp.POSH.NewIdentifier
Validierung vorbereiten:
Alias Cert14062017-1
Let’s Encrypt IIS Verzeichnis auf HTTP umstellen…
Umstellung auf HTTP erfolgreich
DNS Namen durch Let’s Encrypt validieren lassen…
Validierung durchführen: Cert14062017-1
Submit-ACMEChallenge : challenge has not been decoded
In C:\ssl\CertificateAssistant.ps1:297 Zeichen:17
+ … $Validate = Submit-ACMEChallenge $ACMEAlias -ChallengeType http-01
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Submit-ACMEChallenge], InvalidOperationException
+ FullyQualifiedErrorId : System.InvalidOperationException,ACMESharp.POSH.SubmitChallenge
30 Sekunden warten…
Prüfe ob die DNS-Namen validiert wurden…
Update Alias: Cert14062017-1
Fehler: Validierung für Alias Cert14062017-1 fehlgeschlagen
PS C:\ssl>
Vielen Dank erstmal für die Arbeit, habe es eben auf einem Server 2016 + Exchange 2016 ausprobiert. Bei mir klappt es nur bis zur Validierung, da kommt der erste Fehler:
New-ACMEIdentifier : Error creating new authz :: Name does not end in a public suffix
In C:\Users\Administrator\Documents\CertificateAssistant.ps1:270 Zeichen:14
+ $NewID = New-ACMEIdentifier -Dns $ExchangeSAN -Alias $ACMEAlias
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (ACMESharp.Vault.Model.IdentifierInfo:IdentifierInfo) [New-ACMEI
AcmeWebException
+ FullyQualifiedErrorId : urn:acme:error:malformed (400),ACMESharp.POSH.NewIdentifier
Validierung vorbereiten:
Alias Cert08062017-3
Complete-ACMEChallenge : Der angegebene Schlüssel war nicht im Wörterbuch angegeben.
In C:\Users\Administrator\Documents\CertificateAssistant.ps1:273 Zeichen:20
+ … lidateReq = Complete-ACMEChallenge $ACMEAlias -ChallengeType http-01 …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Complete-ACMEChallenge], KeyNotFoundException
+ FullyQualifiedErrorId : System.Collections.Generic.KeyNotFoundException,ACMESharp.POSH.CompleteChalle
Let’s Encrypt kann natürlich die lokale Adresse nicht auflösen, jedoch kommt bei den von außen erreichbaren URLs folgender Fehler wie oben:
Submit-ACMEChallenge : Der angegebene Schlüssel war nicht im Wörterbuch angegeben.
In C:\Users\Administrator\Documents\CertificateAssistant.ps1:297 Zeichen:17
+ … $Validate = Submit-ACMEChallenge $ACMEAlias -ChallengeType http-01
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Submit-ACMEChallenge], KeyNotFoundException
+ FullyQualifiedErrorId : System.Collections.Generic.KeyNotFoundException,ACMESharp.POSH.SubmitChalleng
Die Validierung ist dann aber ok aber das Zertifikat wird nicht erstellt:
New-ACMECertificate : Der angegebene Schlüssel war nicht im Wörterbuch angegeben.
In C:\Users\Administrator\Documents\CertificateAssistant.ps1:323 Zeichen:14
+ … $NewCert = New-ACMECertificate $SubjectAlias -Generate -AlternativeI …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [New-ACMECertificate], KeyNotFoundException
+ FullyQualifiedErrorId : System.Collections.Generic.KeyNotFoundException,ACMESharp.POSH.NewCertificate
Submit-ACMECertificate : No certificates found
In C:\Users\Administrator\Documents\CertificateAssistant.ps1:324 Zeichen:20
+ $SubmitNewCert = Submit-ACMECertificate $SANAlias
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Submit-ACMECertificate], InvalidOperationException
+ FullyQualifiedErrorId : System.InvalidOperationException,ACMESharp.POSH.SubmitCertificate
Hat jemand dasselbe Problem bzw. eine Lösung parat? Danke
Thanks for the posting and would love an English script is you have those skills?
Question: The script works of the host names. We have multiple domains and would need SAN certificates for entries like: autodiscover.domain1.com and autodiscover.domain2.com
It is possible to set the Exchange host names to have multiple names so that this script will pick them all up?
If so, do you know the format of the settings? we tried: domain.com;domain.com and domain.com,domain.com But can’t think what else it may be?
Hi Franky, du hast vor einem Monat geschrieben, dass es demnächst eine neue Version geben wird mit noch kleineren Anpassungen für Exchange 2013.
Sind diese Anpassungen in die aktuell downloadbare Version schon eingeflossen ?
Wird es noch eine neue Version geben, oder funktioniert mit der aktuellen alles ohne Probleme mit Exchange 2013 ?
Beste Grüße
Gerald
Hi Gerald,
die Version ist noch aktuell, ich habe es bisher nicht auf Exchange 2013 getestet, allerdings mehrere Mails erhalten, dass es auch bei Exchange 2013 problemlos funktioniert.
Gruß, Frank
Schnelle Lösung von mir:
Ich habe den Teil bezüglich der DNS Überprüfung auskommentiert, somit ging es nun fehlerfrei.
Warum nun der Google DNS und auch andere DNS Server (Hetzner) ein Problem damit haben ist mir noch nicht ganz klar. Evtl. Liegts an der Routine zur Überrpüfung?
Vielleicht gibt es eine simple Lösung, bzw. Erklärung woran es liegt.
Ich habe da irgendwie ein kleines Problem…
Der Exchange 2016 ist hinter einer IPFire Firewall. Im IPFire sind Aliasnamen für die jeweiligen IP/DNS Adressen eingerichtet. Hinter der IPFire sind mehrere Server. Alles andere (andere Dienste usw) funktionieren.
Wenn ich nun eine DNS Abfrage auf die Adresse des Echange mache kommt die richtige IP dabei raus.
Die IP/DNS Überprüfung beim Assistenten ergibt hier jedoch eine andere, nämlich die der IPFire.
Richtig ist: mail.xxxx.de 123.123.123.123
Falsch ist (die der IPFIre): mail.xxxx.de 456.456.456.456
Es bricht mir der Assistent nach dem Anlegen des Task ab aufgrund der Fehlerprüfung der DNS Auflösung.
Wie kann ich das umgehen?
Hallo,
erstmal vielen Dank für das tolle Script
Leider erhalte ich am Ende immer die folgenden Meldung:
Fehler: Validierung für Alias Cert19052017-1 fehlgeschlagen
Woran könnte das liegen?
Viele Grüße
Volker
Hallo Franky
habe den Grund der Fehler ermittelt. NIcht komplette Konfiguration…..
Sorry
Hallo Franky,
Ich kann mich Gerald nur anschliessen…herzlichen Dank für die hervorragenden Beiträge!
Ich habe Schwierigkeiten mit dem Script. (Server2016 mit Exchange 2016)
Zunächst bei der Installation des ACME Powershellmoduls: Es gibt eine Fehlermeldung, dass das Get-Certificate commandlet schon existiert.(https://github.com/ebekker/ACMESharp/wiki/FAQ)
Daher habe ich Dein script modifiziert:
Zeile38 Install-Module -Name ACMESharp -AllowClobber
Zeile39 Import-Module ACMESharp -ea 0 -Prefix ACME
Dann erhalte ich aber Fehler. Hast Du eine Idee warum?:
Herzlichen Dank
MIchael
Lese Exchange Konfiguration…
WARNUNG: Das Cmdlet „Get-ClientAccessServer“ wird in einer künftigen Version von Exchange entfernt. Verwenden Sie stattdessen das Cmdlet „Get-ClientA
ccessService“. Wenn in Skripts das Cmdlet „Get-ClientAccessServer“ verwendet wird, aktualisieren Sie die Skripts, sodass sie das Cmdlet „Get-ClientAcc
essService“ verwenden. Weitere Informationen finden Sie unter „http://go.microsoft.com/fwlink/p/?LinkId=254711“.
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\Users\ExchangeAdmin\Downloads\CertificateAssistant.ps1:93 Zeichen:4
+ [array]$CertNames += ((Get-OutlookAnywhere -Server $ExchangeServer …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\Users\ExchangeAdmin\Downloads\CertificateAssistant.ps1:95 Zeichen:4
+ [array]$CertNames += ((Get-OabVirtualDirectory -Server $ExchangeSe …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\Users\ExchangeAdmin\Downloads\CertificateAssistant.ps1:97 Zeichen:4
+ [array]$CertNames += ((Get-ActiveSyncVirtualDirectory -Server $Exc …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\Users\ExchangeAdmin\Downloads\CertificateAssistant.ps1:99 Zeichen:4
+ [array]$CertNames += ((Get-WebServicesVirtualDirectory -Server $Ex …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\Users\ExchangeAdmin\Downloads\CertificateAssistant.ps1:108 Zeichen:5
+ [array]$CertNames += ((Get-MapiVirtualDirectory -Server $Exchange …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Hi Franky,
gibt’s schon was neues in Punkto Exchange 2013 Test ? Weißt du schon mehr ob das Script auch mit dem 2013er funktioniert ?
Vielen Dank für deine super Beiträge !
Beste Grüße
Hi Gerald,
vielen Dank für das Lob. Ich habe bisher 4 Rückmeldungen erhalten, dass es auch mit Exchange 2013 auf Windows Server 2012 R2 funktioniert. Es sind kleinere Anpassungen nötig und es gibt demnächst eine neue Version.
Gruß, Frank
Hallo Alex,
das Script habe ich Frank bereits zur Verfügung gestellt.
Ich habe es dahingehend auch noch einmal angepasst, dass aktuell zumindest einmal zwischen Exchange 2010 und Exchange2013/2016 unterschieden und die entsprechenden Verzeichnisse abgefragt und der passende Import-Befehl verwendet wird.
Vlt. kann er dir das angepasste Script einmal zukommen lassen.
Dann könnte man das Script natürlich um weitere Abhängigkeitsprüfungen erweitern.
Schöne Grüße
Björn
Hallo Bjoern,
danke für deine Feedbacks, welche ich hier auch gerne bestätigen kann. Ich hatte mich zwar bisher noch nicht an den Zertifikatsassistenten getraut, jedoch die manuelle Methode aus dem Beitrag von Januar auf zahlreiche Server (2010, 2012R2, 2013) angewendet. Auch ich hatte dort ein paar Änderungen vorgenommen, welche sich zu großen Teilen mit deinen decken. Du findest sie in meinem Kommentar zur manuellen Anleitung.
Deine Erfahrungen mit dem WMF5 kann ich auch bestätigen, dies ist übrigens schon ein Problem wenn unter Exchange 2010 noch kein Service Pack installiert war, aber das WMF, dann kann man das SP nicht installieren, da ein Authentifizierungsfehler auftritt. Also wieder deinstallieren, alle SP & UR/CU installieren und erst dann WMF5 installieren. Die Inkompatibilität von WMF5 wird übrigens auch auf einer KB-Seite von Microsoft in einer Matrix erwähnt.
Übrigens muss für Exchange 2010 mindestens SP1 (evtl. sogar höher) installiert sein, da erst ab dann die CMDlets zum Import des Zertifikats funktionieren.
Somit wäre es sinnvoll das Skript soweit zu erweitern, dass einerseits die Exchange-Version (<2016 vs 2016) überprüft wird und andererseits dazu auffordert erst alle Updates zu installieren (insbesondere im Fall von Exchange 2010) und WMF5 im Anschluss zu installieren. Letzteres am Besten mit Angabe des Downloadlinks von http://www.powershellgallery.com
Kannst du dein modifiziertes Skript mal irgendwo posten (bspw. PasteBin)? Ggfs. finde ich nächste Woche die Zeit die Änderungen dort einzupflegen. Ich persönlich würde sogar ein GitHub-Projekt bevorzugen, jedoch muss damit auch Frank einverstanden sein.
Liebe Grüße,
Alex
Inzwischen konnte ich das Script einmal gegen einen Windows Server 2012R2 und Exchange 2013 testen.
Hierbei sind keine großartigen Änderungen am Script gegenüber dem Exchange 2016 notwendig. (anders als beim Exchange 2010)
Nur die abgefragten Pfade müssen geändert werden.
Mir sind allerdings folgende Probleme aufgefallen:
1. Zur Ausführung des Scripts ist das Management Framework 5.0 erforderlich. Sobald ich dieses allerdings auf einem Windows Server 2012 R2 mit Exchange 2013 installiere, kann ich keine Management Shell mehr aufrufen bzw. diese nicht mehr mit dem Exchange verbinden. Deinstalliere ich das Framework 5.0 geht das wieder aber das Script kann nicht mehr ausgeführt werden, da das ACME-Modul nicht mehr gefunden wird und nicht installiert werden kann.
2. Bei der Validierung der DNS-Namen erhalte ich in dieser Konstellation eine Fehlermeldung (Variable $error kann nicht überschrieben werden. Entweder ist die Schreibgeschützt oder eine Konstante)
Das hat zwar keine Auswirkung auf das Script, ist dennoch seltsam und etwas unschön.
Ansonsten läuft das Script aber prinzipiell durch. Auch der Import des Zertifikats funktioniert.
Die Anpassung, um das Autodiscovery mit zu erkennen funktioniert auch mit Exchange 2013.
Ich habe jetzt eine fertig angepasste Version für Exchange 2010.
Kann ich dir die evtl irgendwie zukommen lassen?
Die hauptsächlichen Änderungen waren die beiden oben genannten. Ob die Verlängerung funktioniert sehe ich 4 Tage vor Zertifikatsablauf.
Müsste aber. Werden ja die gleichen Befehle verwendet.
Der Import des Zertifikats funktioniert im Exchange 2010 leider auch nicht wie im Script angegeben.
Ich habe deshalb für Exchange 2010 die Zeile
Import-ExchangeCertificate -FileName $CertPath -FriendlyName $ExchangeSubject -Password $ImportPassword -PrivateKeyExportable:$true | Enable-ExchangeCertificate -Services „SMTP, IMAP, POP, IIS“ –force
durch
Import-ExchangeCertificate -FileData ([Byte[]]$(Get-Content -Path $CertPath -Encoding byte -ReadCount 0)) -FriendlyName $ExchangeSubject -Password $ImportPassword -PrivateKeyExportable:$true | Enable-ExchangeCertificate -Services „SMTP, IMAP, POP, IIS“ -force
ersetzt.
Damit funktioniert der Zertifikatsimport im Exchange 2010.
Zum Problem, dass Autodiscovery nicht mit für das Zertifikat erkannt wird:
Ich habe die Zeile
[array]$CertNames += ((Get-ClientAccessService -Identity $ExchangeServer).AutoDiscoverServiceInternalUri.Host).ToLower()
in
[array]$CertNames += ((Get-ClientAccessServer -Identity $ExchangeServer).AutoDiscoverServiceInternalUri.Host).ToLower()
geändert (Exchange 2010). Dann wird auch die Autodiscovery URL mit erkannt.
Hi Bjoern,
danke für den Hinweis.
Gruß, Frank
Hallo zusammen,
das Problem mit der angeblich nicht aufzulösenden IP-Adresse hatte ich auch. Im script habe ich dann die Zeile 208
$DNSIP = (Resolve-DnsName $CertName -Server 8.8.8.8 -ea 0).IPAddress
geändert in
$DNSIP = (Resolve-DnsName $CertName -Server 8.8.8.8 -ea 0).IP4Address
Bei mir ist jedoch auch ipV6 aktiv, so dass die Abfrage eine Antwort auf IP6Address und IP4Address liefert, jedoch keine IPAdress ohne 4 oder 6.
Jetzt läuft es einwandfrei.
Gruß
Torsten
Zitat:“
Hi Thomas,
„Resolve-DnsName master.xyz.com -Server 8.8.8.8 -ea 0“ löst den DNS Namen via Google DNS Server auf, wenn du hier interne IP Adressen bekommst, liegt entweder ein Problem an deiner DNS Konfiguration vor und die spätere Validierung von Let’s Encrypt schlägt fehl, oder ein Gerät in deinem Netz schreibt die Antwort des Google DNS um.
Gruß, Frank“
Das scheint so nicht ganz zu stimmen. Konnte das Verhalten nachvollziehen unter folgender Bedingung (Hostnamen sind nur Beispiele)
Der Exchange hat als Hostname im LAN ex01.hh.test-domain.de was gleich der Name welcher aufgelöst werden soll ist. Passiert offenbar wenn man die internen URLs = dem Hostnamen gewählt hat.
mit der Originalzeile des Scripts:
„$DNSIP = (Resolve-DnsName $CertName -Server 8.8.8.8 -ea 0).IPAddress“
wird aber scheinbar der DNS Cache des Servers bemüht und es wird die interne LAN IP aufgelöst.
Habe die Zeile angepasst und dann klappt es:
$DNSIP = (Resolve-DnsName $CertName -Server 8.8.8.8 -DnsOnly -ea 0).IPAddress
Hoffe das hilft.
Zu besagter Zeile habe ich noch eine Frage. Was macht das -ea 0 ??? Kenne mich mit Powershell nur wenig aus.
Gruß Axel
Hi Axel,
stimmt, ohne den Parameter -DnsOnly wird der DNS Cache verwendet, was zu dem Problem führen kann. Vielen Dank für den Hinweis.
Zu deiner Frage: -ea 0 ist die Abkürzung für -ErrorAction SilentlyContinue (welches Fehlermeldungen unterdrückt)
Gruß, Frank
Kann ich das Script auch mit einem bereits eingerichteten LetsEncrypt Zertifikat, zwecks Auto Renewal?
Hi Peter,
das müsstest du bitte einmal ausprobieren. Ich habe das bisher nicht getestet, aber es sollte funktionieren. Gruß, Frank
Let’s encrypt für die Sophos SG steht für die 9.6 au der Roadmap. Ich denke mit der 9.6 dürfte aber eher im Q4 zu rechnen sein. Für die XG kann ich nur mutmaßen, hoffe aber das es auch angeplant ist. Derzeit ist Sophos ja sehr bemüht das funktionale Delta zwischen XG und SG aufzuheben und die XG entsprechend zu erweitern. Anschließend wird es wohl eine XG first Strategie.
Danke für das Script, tolle Arbeit.
Habe das ganze unter Server 2012R2 und Exchange 2016 getestet. Folgendes ist aufgefallen.
1. Es muss Powershell 5.x installiert werden, sonst schlägt das Installieren des ACME fehl ( Install-Module fehlt wohl im Original Powershell des 2012R2) – habe die Version 5.1 installiert.
2. autodiscover wurde nicht automatisch erkannt. Warum auch immer. Liegt also offenbar nicht an der Exchange Version (Stephan hatte das gleiche Ergebnis mit 2013) – manuelles hinzufügen hilft.
Bin jetzt gespannt wie gut die automatische Erneuerung klappen wird.
Gruß Axel
Hi Frank,
Also ich habe eine Fritz.Box in der der Server als Exposed Host eingetragen ist. Zusätzlich sind die Ports 80 und 443 explizit geöffnet. IPV6 habe ich bei der Internetverbindung deaktiviert. Wenn ich die Auflösung von hier aus teste: http://www.dnstools.ch/dns-nameserver.html dann funktioniert die Auflösung. Ein Zertifikat bekomme ich aber nicht ausgestellt. Kannst du mir sagen welche Einträge im DNS-Server vorhanden sein müssen damit die Auflösung funktioniert? Ich habe auch keinen weiteren DNS-Server im Netz. Selbst wenn ich den Google-DNS-Server als einzigen DNS-Server in der Einstellung der Netzwerkkarte eintrage, funktioniert das nicht. Danke und Gruß aus Hamburg
So,- nachdem ich heute den ganzen Tag damit verbracht habe und nicht ein einziges Stück weiter gekommen bin, muss ich hier doch noch mal nachharken bevor ich mir wieder ein Zertifikat kaufe. Ich erhalte folgende Ausgabe:
[PS] C:\Windows\system32>Resolve-DnsName master.XYZ.com -Server 8.8.8.8 -ea 0
Name Type TTL Section IPAddress
—- —- — ——- ———
Master.XYZ.com AAAA 1200 Question fe80::1000:d49:d1fe:398e
Master.XYZ.com AAAA 1200 Question 2001:0:34a9:ece7:1000:d49:d144:398e
Master.XYZ.com AAAA 1200 Question fe80::5efe:192.168.0.2
Master.XYZ.com AAAA 1200 Question fe80::c1ab:3d1b:7767:392
Master.XYZ.com A 1200 Question 192.168.0.2
[PS] C:\Windows\system32>Resolve-DnsName server.XYZ.com -Server 8.8.8.8 -ea 0
Name Type TTL Section NameHost
—- —- — ——- ——–
server.XYZ.com CNAME 59 Answer XYZ.com
Name : XYZ.com
QueryType : A
TTL : 59
Section : Answer
IP4Address : 46.59.198.111
Name : XYZ.com
QueryType : SOA
TTL : 1799
Section : Authority
NameAdministrator : hostmaster.XYZ.com
SerialNumber : 1488220650
TimeToZoneRefresh : 16384
TimeToZoneFailureRetry : 2048
TimeToExpiration : 1048576
DefaultTTL : 2560
[PS] C:\Windows\system32>
Der FQDN server.XYZ.com wird korrekt aufgelöst, der Hostname master.XYZ.com hingegen nicht. Dabei sind beide kann ich keine Unterschiede in der Konfiguration erkennen. Mittlerweile konfiguriere ich völlig ohne Hirn und Verstand weil ich das so gar nicht verstehen kann in der Hoffnung ein besseres Ergebnis zu erhalten.
Kann mir hier jemand weiter helfen?
Hallo Frank,
vielen Dank für den Assistenten! Funktioniert auch bei mir tadellos.
Jetzt müsste man nur für das automatische renewal eine dauerhafte Ausnahme in der UTM für das Verzeichnis .well-known auf Port 80 hinzufügen. Oder gibt es Sicherheitsbedenken, wenn das Verzeichnis dauerhaft „offen“ ist?
Danke und beste Grüße
Hi Sönke,
die UTM soll wohl direkte Unterstützung für Let’s Encrypt bekommen, was ich klasse finde. Mal sehen ob es wirklich kommt. Ich habe es bisher nicht hinbekommen die UTM so zu konfigurieren, dass ein http/https Redirect stattfindet, aber das .well-known Verzeichniss per http erreichbar ist. Wenn du da einen Tipp hast, immer her damit :-)
Gruß, Frank
Moin, Moin,
also ich muss jetzt mal fragen nachdem ich nun schon das zweite mal den Exchange neu aufgesetzt habe. Alles klappt soweit ganz gut, nur das wichtigste Zertifikat schlechthin wird nicht ausgestellt weil ich hierüber:
Resolve-DnsName master.xyz.com -Server 8.8.8.8 -ea 0
die internen IP-Adressen aufgelöst bekomme. Wie kann ich das ändern?
Danke und Gruß aus Hamburg
Hi Thomas,
„Resolve-DnsName master.xyz.com -Server 8.8.8.8 -ea 0“ löst den DNS Namen via Google DNS Server auf, wenn du hier interne IP Adressen bekommst, liegt entweder ein Problem an deiner DNS Konfiguration vor und die spätere Validierung von Let’s Encrypt schlägt fehl, oder ein Gerät in deinem Netz schreibt die Antwort des Google DNS um.
Gruß, Frank
Hallo Frank,
vielen Dank für dieses Script und deine Arbeit in dieses.
Erhalte jedoch beim Export des Scripts eine Fehlermeldung.
Anbei der Auszug aus der Konsole:
Prüfe DNS Einträge…
DNS Test bestanden: autodiscover.xxxxx.de wurde in IP 188.109.xxx.yyy aufgelöst
DNS Test bestanden: outlook.xxxxx.de wurde in IP 188.109.xxx.yyy aufgelöst
Prüfe ob bereits ein Vault existiert…
Prüfe Let’s Encrypt Registrierung…
Neuer Identifier:
DNS: autodiscover.xxxxx.de
Alias: Cert24022017-1
Validierung vorbereiten:
Alias Cert24022017-1
Neuer Identifier:
DNS: outlook.xxxxx.de
Alias: Cert24022017-2
Validierung vorbereiten:
Alias Cert24022017-2
Let’s Encrypt IIS Verzeichnis auf HTTP umstellen…
Umstellung auf HTTP erfolgreich
DNS Namen durch Let’s Encrypt validieren lassen…
Validierung durchführen: Cert24022017-1
Validierung durchführen: Cert24022017-2
30 Sekunden warten…
Prüfe ob die DNS-Namen validiert wurden…
Update Alias: Cert24022017-1
Validierung OK
Update Alias: Cert24022017-2
Validierung OK
30 Sekunden warten…
Prüfe das Zertifikat…
Zertifikat OK
Exportire das Zertifikat nach C:\Users\ex-admin\AppData\Local\Temp
Get-ACMECertificate : asset file does not exist
In C:\Users\ex-admin\Desktop\Let´sEncrypt CertificateAssistant\CertificateAssistant.ps1:356 Zeichen:15
+ … ertExport = Get-ACMECertificate $SANAlias -ExportPkcs12 $CertPath -Ce …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-ACMECertificate], FileNotFoundException
+ FullyQualifiedErrorId : System.IO.FileNotFoundException,ACMESharp.POSH.GetCertificate
Prüfe ob das Zertifikat exportiert wurde…
Fehler: Das Zertifikat wurde nicht exportiert
Hat jemand eine Ahnung woran das liegen kann?
Vielen Dank für eure Hilfe!
Gruß
Stephan
Leider funktioniert die Erneuerung nicht wirklich:
Get-ACMECertificate : The file ‚C:\Users\Administrator.PSC\AppData\Local\Temp\SAN24022017.pfx‘ already exists.
At C:\Users\Administrator.PSC\Downloads\CertificateAssistant\CertificateAssistant.ps1:438 char:18
+ $CertExport = Get-ACMECertificate $SANAlias -ExportPkcs12 $CertPath -Certific …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-ACMECertificate], IOException
+ FullyQualifiedErrorId : System.IO.IOException,ACMESharp.POSH.GetCertificate
Import-ExchangeCertificate : A special Rpc error occurs on server EX1W12: The source data cannot be imported or the wrong password was specified.
At C:\Users\Administrator.PSC\Downloads\CertificateAssistant\CertificateAssistant.ps1:441 char:4
+ Import-ExchangeCertificate -FileName $CertPath -FriendlyName $ExchangeSubject …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ReadError: (:) [Import-ExchangeCertificate], InvalidOperationException
+ FullyQualifiedErrorId : [Server=EX1W12,RequestId=706bdc24-6bb9-43f8-9279-688a492e4c61,TimeStamp=24.02.2017 09:17:48] [FailureCategory=Cmdlet-InvalidOperationExcep
tion] F11D832B,Microsoft.Exchange.Management.SystemConfigurationTasks.ImportExchangeCertificate
Hi Peter,
stimmt, am gleichen Tag brauchst du es aber auch nicht erneuern. Morgen würde es klappen. Ich schaue mal, dass ich das Script noch ein wenig verbessere.
Danke für den Hinweis.
Gruß, Frank
Let’s encrypt steht auf der Sophos Roadmap. Sollte noch dieses Jahr integriert werden.
@Frank: Vielen Dank
Hi Rene,
da bin ich ja mal gespannt :)
Gruß, Frank
Hi, vielen Dank für deine Mühen und das Skript, welches vmtl. vielen die Arbeit abnehmen wird. Besteht die Chance, dass dieses auch mit Exchange 2010 läuft / laufen wird?
Ja die Chance besteht :-)
Nach ein paar Anpassungen hat das Script sehr gut funktioniert. Vielen Dank dafür.
Macht es denn ueberhaupt Sinn, die InternalURLs mit abzufragen? Entweder sind sie gleich (SplitBrain) oder der interne ist nicht DNS-aufloesbar und darf nicht mit rein.
Oder gibt es da Fälle, wo intern und extern unterschiedlich, aber trotzdem uebers Internet aufloesbar sind?
Hi Thomas,
wenn interne URLs konfiguriert wurden und diese später nicht auf dem Zertifikat stehen, wird es zu Zertifikatswarnungen kommen. Anders herum, wenn interne URLs angegeben wurden, diese aber nicht durch Let’s Encrypt validierbar sind, kann kein Zertifikat ausgestellt werden. Daher die Prüfung.
Gruß, Frank
Hi Frank,
das selbstsignierte läuft doch auch aus.
Wäre es nicht sinnvoll hier vorzubeugen?
grüße Stephan
Hi Stephan,
das Backend Zertifikat hat eine Laufzeit von 5 Jahren. Vor Ablauf kann es einfach wieder gegen ein selbstsigniertes Zertifikat getauscht werden. Es besteht wie schon erwähnt keine Notwendigkeit ein anderes Zertifikat zu verwenden.
Gruß, Frank
Coole Sache!
Ich bereite grade eine Migration auf Ex16 vor, da kommt dies sehr gelegen, da auch das gekaufte Zertifikat bald ausläuft.
Der offene Port 80 lässt mich noch grübeln: Bisher habe ich den Exchange über die Sophos WAF veröffentlicht und dort 80 nach 443 umleiten lassen.
Noch ohne eigene Tests: Funktioniert die Zertifikatserneuerung auch über die WAF Umleitung auf 443, oder muss hier die WAF nur auf 443 hören und für Let’sEncrypt auf 80 gibt es eine NAT-Regel? Die könnte man auf die Let’sEncrypt-IPs einschränken, dann bleiben aber alle Port 80 OWA User draußen…
Hi Nathan,
mit der WAF wird es etwas schwieriger. Lets Encrypt muss den Server per Port 80 erreichen können, ein Redirect von 80 auf 443 an der WAF wird also nicht funktionieren. Ich habe das bisher nicht in Verbindung mit der WAF getestet, aber das Zertifikat müsste ja auch auf der Sophos installiert werden, wenn es erneuert wird. Das dürfte schwierig werden.
Gruß, Frank
Ach stimmt ja…
Dann müssen wir weiter hierfür voten: http://ideas.sophos.com/forums/17359-utm-formerly-asg-feature-requests/suggestions/10409280-let-s-encrypt-integration
Hi Nathan,
da habe ich auch schon für gevoted :-)
Gruß, Frank
Gibt es eine Möglichkeit eine bestimmte Domäne von der Prüfung auszuschließen?
Beispielsweise die exchange.domain.local
HI,
nein eine konfigurierte Domain ausschließen funktioniert nicht. Es würde zu Zertifikatswarnungen kommen. Gruß, Frank
Klasse Tool,
habe für Server 2012R2 Exchange 2013 folgendes festgestellt:
1. Powershell 5 muss installiert sein
-> https://www.microsoft.com/en-us/download/details.aspx?id=50395
2. ACME muss ohne den Zusatz „-AllowClobber“ installiert werden
3. Autodiscover kann nicht ermittelt werden
-> habe ich manuell hinzugefügt, liegt vermutlich an der Abfrage gegen den Exchange
4. Ich hatte schon das Problem, dass der IIS auf Pot 444, also Exchange BackEnd, das falsche ungültige Zertifikat hatte, somit kein Sync mit Endgeräten möglich war. Dies sollte noch beachtet werden.
-> habe ich manuell angepasst
Grüße Stephan
Hi Stephan,
das Zertifikat der Backend Website wird nicht ausgetauscht, hier bleibt das Exchange Self Signed im Einsatz, das stört auch nicht.
Danke für die Hinweise.
Gruß, Frank
Hammer! Vielen Dank dafür!