Seit dem CU12 für Exchange 2019 und dem CU23 für Exchange 2016 können Zertifikate nicht mehr einfach via Exchange Admin Center angefordert oder importiert werden. Hintergrund ist eine Änderung an den CMDLets „New-ExchangeCertificate“, „Import-ExchangeCertificate“ und „Export-ExchangeCertificate“, hier können nun keine UNC Pfade mehr verwendet werden. Im Exchange Admin Center gab es vor CU12 und CU23 die Möglichkeit direkt eine Zertifikatsanforderung zu erstellen und vorhandenes Zertifikat zu importieren oder zu exportieren. Dies ist nun nicht mehr direkt in Exchange Admin Center möglich:
Eine Zertifikatsanforderung lässt sich aber einfach per Exchange Management Shell erstellen, der folgende Befehl muss dazu nur an die eigene Umgebung angepasst werden (Das Hochkomma dient nur dem Zeilenumbruch zur besseren Lesbarkeit):
$CSR = New-ExchangeCertificate -Server "SERVERNAME" `
-GenerateRequest `
-FriendlyName "Exchange Zertifikat" `
-PrivateKeyExportable $true `
-SubjectName `
"c=LÄNDERCODE, `
s=BUNDESLAND, `
l=STADT, `
o=FIRMENNAME, `
ou=ORGANISATIONSEINHEIT, `
cn=ALLGEMEINER_NAME" `
-DomainName `
outlook.frankysweblab.de, `
autodiscover.frankysweblab.de `
$CSR
Der Befehl gibt euch die Zertifikatsanforderung (CSR) direkt auf der Shell aus:
Der CSR kann nun bei einer Zertifizierungsstelle eingereicht werden. Sobald das Zertifikat vorliegt, kann es mit dem folgenden Befehl importiert werden:
$ImportCert = Import-ExchangeCertificate -FileData ([Byte[]]$(Get-Content -Path c:\Install\certificate.cer -Encoding byte -ReadCount 0))
Nach dem Import des Zertifikats können noch die Exchange Dienste per Shell an das Zertifikat gebunden werden:
Enable-ExchangeCertificate -Thumbprint $ImportCert.Thumbprint -Services POP,IMAP,SMTP,IIS
Das Zuweisen der Exchange Dienste ist allerdings nach wie vor auch noch über das Exchange Admin Center möglich:
Alternativ lässt sich das Zertifikat oder auch ein Zertifikat inklusive des Privaten Schlüssels (PFX Datei) via MMC importieren:
Nach dem Import müssen die Exchange Dienste an das neue Zertifikate gebunden werden. Wie bereits erwähnt, ist dies per Exchange Admin Center möglich:
Der Export des Zertifikats inkl. des privaten Schlüssels ist nun auch nur noch via Exchange Management Shell möglich, hier der neue Befehl für den Export:
Get-ExchangeCertificate
$ExportCert = Export-ExchangeCertificate -Thumbprint 85AB0C0D042CA2A406A3C35DCB85FD2D99EC5B92 -BinaryEncoded -Password (convertto-securestring -string "PASSWORD" -asplaintext -force)
Set-Content -Path c:\Install\Cert.pfx -Value $ExportCert.FileData -Encoding byte
Der Befehl für den Import einer PFX Datei lautet wie folgt:
Import-ExchangeCertificate -FileData ([Byte[]]$(Get-Content -Path c:\Install\cert.pfx -Encoding byte -ReadCount 0)) -Password (convertto-securestring -string "PASSWORD" -asplaintext -force)
Hallo,
ich habe mir mit dem Script einen CSR erzeugt. Das hat funktioniert. Der Zertifikat habe ich auch importieren können, aber Windows/ Exchange ordnet es nicht der offenen Anforderung zu. So habe ich ein Zertifikat im Store, aber ohne den Key.
Wie bekomme ich denn beim Import den Zusammenhang hergestellt?
Klaus
Hallo Zusammen,
ich bin wirklich am Verzweifeln mit der Anforderung. Die Anleitung ist toll, aber irgendwie bekomme ich es einfach nicht hin eine Datei zu generieren. Habe einen Exchange Server 2016.
Die Anforderung habe ich wie beschrieben in der Exchange Management Shell eingegeben. Nach dem Aufruf will er immer ein SMTP Standardzertifikat überschreiben bzw. fragt danach. Ich habe da mal danach geschaut im EAC und es ist ein selbstsigniertes Zertifikat, welches aber überhaupt nicht den CN trägt den ich in der Anforderung eingegeben habe. Auch wenn ich es überschreiben möchte, erscheint eine große Liste mit Fehlermeldungen, was er alles nicht finden kann. Gleich nach der Anforderung erscheint die Meldung: „Dieses Zertifikat wird nicht für externe TLS-Verbindungen mit einem FQDN von „Mein Server Name“ verwendet, weil das von der CA signierte Zertifikat mit dem Fingerabdruck „….“ den Vorrang übernimmt. Die folgenden Connectors stimmen mit dem betreffenden FQDN überein: …..
Vielleicht weiß hier jemand Rat oder hatte was ähnliches. Ich bin echt am Ende und sehr traurig das die Funktionen über das EAC nicht mehr geht. Warum muss es so kompliziert sein, oder ich bin einfach zu blöd dazu. Mache das ja nicht jeden Tag. Grüße Markus
Hallo,
ich habe deine anleitung befolgt und es gibt mir folgende Fehlerrmldung. Hast dui hierzu eine Lösung?
Es wurde kein Positionsparameter gefunden, der das Argument „$null“ akzeptiert.
+ CategoryInfo : InvalidArgument: (:) [New-ExchangeCertificate], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,New-ExchangeCertificate
+ PSComputerName : ex2019.domaene.local
$CSR = New-ExchangeCertificate -Server „EX2019“ -GenerateRequest -FriendlyName „Exchange Zertifikat Freitan“ -PrivateKeyExportable $true -SubjectName „c=DE, s=Rheinland Pfalz, l=Kelsterbach, o=Firma GmbH, ou=IT, cn=Hans“ -DomainName remote.domaene.de, autodiscover.domaene.de $CSR
Erst die Variable befüllen:
$CSR = New-ExchangeCertificate -Ser …
und dann die Variable ausführen mit:
$CSR
Hallo,
ich bin völlig am verzweifeln! Ich habe alles nach Anleitung erledigt. Nun will ich das neue Zertifikat hinzufügen, was auch ohne Fehlermeldung klappt.
ABER
im Admin Center steht das „neue“ Zertifikat noch auf „Ausstehende Anferderung“. Will ich per PS die Dienste zuweisen kommt immer folgende Fehlermeldung:
Das Argument kann nicht an den Parameter „Thundprint“ gebunden werden, da es sich um eine leere Zeichenfolge handelt.
Ich wäre für einen Tipp SEHR dankbar!
Mfg
Christian
Moin,
habt ihr schon mal eine automatische Verlängerung bei Zertifikaten gehabt? Bei PSW z.B. kann man ein Cert für 3 Jahre kaufen und bekommt jedes Jahr automatisch ein neues crt. Hier kann man wählen ob man ein neues CSR einreicht (mit einem neuen key) oder wenn man nichts einreicht, er einfach den alten CSR (vom alten Key) nimmt. Kann man das einfach ohne erneutes CSR durchlaufen lassen und nur das neue CRT importieren (und er nimmt automatisch den alten privat Key) mit:
$ImportCert = Import-ExchangeCertificate -FileData ([Byte[]]$(Get-Content -Path c:\Install\certificate.cer -Encoding byte -ReadCount 0))
Oder muss man immer ein neues „Zertifikat“ sprich einen privaten Key mit CSR erzeugen? Danke und VG
Hallo Sebastian,
wie bist du / Ihr bei dem Anliegen verblieben? Habt ihr ein neues Zertifikat erstellt?
Viele Grüße
HI Christian, ja wir erstellen mittlerweile immer ein neues Zertifikat. PSW will mittlerweile eh immer ein neues CSR.
VG
Hallo Franky!
Vielen lieben Dank für Deine Anleitung!
Ich bin sehr gut durch Deine Anleitung durchgekommen und verstehe bis heute nicht warum das immer alles so kompliziert sein muß.
Dir einen lieben Dank und alles Gute bis nächstes Jahr, wenn es wieder heißt Zertifikat läuft bald aus……..(leider behalte ich das nicht und mache es echt zu selten)
Vielen DANK!!!!!
bei Wildcardzertifikat musste bei uns der Domain-Eintrag entfallen:
New-ExchangeCertificate -GenerateRequest -FriendlyName „Exchange Zertifikat“ -PrivateKeyExportable $true -SubjectName „C=LÄNDERCODE, S=BUNDESLAND, L=STADT, O=FIRMENNAME, OU=ORGANISATIONSEINHEIT, CN=*.ALLGEMEINER_NAME.com“ -Server „SERVERNAME“
Und: ein „+“ im Firmennamen funzt übrigens net ;)
Hallo,
wenn ich über WIN-ACME ein Zertifikat anfordere muss ich dann dieses Zertifikat vorher anfordern? Oder reicht das eine Zertifikat aus?
Moin Franky,
wieder ein super Artikel. Hat mir sehr geholfen.
Danke Dir.
LG Peter
Hallo zusammen
Danke für den wertvollen Beitrag, leider erhalte auch ich die Meldung:
+ CategoryInfo : InvalidArgument: (:) [New-ExchangeCertificate], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,New-ExchangeCertificate
+ PSComputerName : Exchangeserver
Was machen wir falsch?
Danke für Eure Tipps!
Hi, ich hatte gerade das selbe Problem, der Fehler sollte folgender sein:
Am Ende der letztenZeile, im Beispiel: „autodiscover.frankysweblab.de `“ ist das „`“ drin. Das Zeichen muss entfernt werden, da er sonst den $CSR versucht als Variable einzufügen, die laut Ausgabe $NULL hat, da nichts vorhanden ist. Wird „`“ entfernt dann gilt es als neuer Seperater Befehl.
Liebe Grüße Haggi
P.s. Hab selber 20 Minuten gesucht ;)
servus
erstmal DANKE für deine TIPPS nur leider klappt das bei meinem ersten ex 2016 NICHT, ich bekomme diese meldung:
Es wurde kein Positionsparameter gefunden, der das Argument „$null“ akzeptiert.
+ CategoryInfo : InvalidArgument: (:) [New-ExchangeCertificate], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,New-ExchangeCertificate
+ PSComputerName : ex16..local
jmd nen tipp ?
danke
ps: WAS denkt sich MS eigentlich nur dabei :(
Hallo Stefan
Ich habe es herausgefunden. Ich musste den ersten Befehl an den Schluss nehmen, dann hat es funktioniert. Ich habe mir den Befehl in eine Zeile gepackt. Das sieht dann so aus:
New-ExchangeCertificate -GenerateRequest -FriendlyName „Exchange Zertifikat“ -PrivateKeyExportable $true -SubjectName „C=LÄNDERCODE, S=BUNDESLAND, L=STADT, O=FIRMENNAME, OU=ORGANISATIONSEINHEIT, CN=ALLGEMEINER_NAME“ -DomainName outlook.frankysweblab.de, autodiscover.frankysweblab.de -Server „SERVERNAME“
Gruss aus Der Schweiz
Thomas
Danke, hatte das gleiche Problem. :)
Danke, das Problerm hatte ich auch. Da soll man drauf kommen. :-)
Super, Danke
$CSR taucht in dem Script gar nicht mehr auf?
Wird das CSR trotzdem in der Schell ausgegeben?
Viele Grüße!
Johannes
Hallo,
vielleicht hat ja jemand eine Idee. Wir haben zwei Exchangeserver mit 2016 CU23 am laufen.
Nun sollte das Zertifikat ausgetauscht werden. Auf dem einen Server hat es wunderbar geklappt. Auf dem zweiten ebenfalls, bis auf die Tatsache, das wir dort auf Teufel komm raus den SMTP Dienst nicht aktivieren können. Im EAC wird nur der IIS Diens als zugewiesen angezeigt.
Wir haben den SMTP Dienst per Shell zugewiesen (keine Fehlermeldung) das gleiche über den EAC. Aber er wird nicht als zugewiesen angezeigt.
Ich wäre Dankbar für eine Idee.
Grüße Andreas
Hallo Andreas, darf ich fragen wie du das Problem gelöst hast? Für eine Antwort wäre ich Dir sehr dankbar :) VG Aleksandar
Sebastian
6. Mai 2022 um 08:08 Uhr
Hallo,
das machen wir z.B. schon immer so. Daher ein kleiner Hinweis, welchen ich und Kollegen bei einigen Kunden beobachtet hatten. Wenn ihr das Zert. am Ende per PowerShell zuweist, überprüft bitte im Anschluss, ob die Zuweisung für alle Dienste wirklich fkt. hat. Es gibt einen Bug (auch in einigen Foren bekannt), dass er das Zert. nicht dem SMTP Dienst zuordnet, erst letzte Woche wieder gehabt. Lösung war bisher, das Zert. zu löschen, dieses per ECP hochladen und dann fkt. auch die Zuweisung zum SMTP Dienst. Es war auch nicht möglich, dass Zert. was vorher da war, per ECP für SMTP zu aktivieren. Das witzige am Ende, es ist am Ende immer das gleiche Zert. Also wie gesagt, nun mehrfach schon beobachtet, sollte jemand den Fall mal haben.
Hallo,
weiß jemand, ob das LetsEncrypt Scripts (das alte CertificateAssistant_v3_EX2016.ps1) nach der Installation von Exchange 2016 CU23 noch funktioniert? Falls nicht, funktioniert das win-acme.v2 mit CU23?
Vielen Dank.
Hallo Martin,
nach Anpassung funktioniert das Script auch unter Exchange 2016 CU23 noch.
Siehe:
https://www.frankysweb.de/community/exchange2019/fehler-bei-lets-encrypt-script-nach-installation-auf-cu12/#post-5120
Die Anpassung ist unter 2016 und 2019 identisch.
Grüße
Jens
Hallo,
das machen wir z.B. schon immer so. Daher ein kleiner Hinweis, welchen ich und Kollegen bei einigen Kunden beobachtet hatten. Wenn ihr das Zert. am Ende per PowerShell zuweist, überprüft bitte im Anschluss, ob die Zuweisung für alle Dienste wirklich fkt. hat. Es gibt einen Bug (auch in einigen Foren bekannt), dass er das Zert. nicht dem SMTP Dienst zuordnet, erst letzte Woche wieder gehabt. Lösung war bisher, das Zert. zu löschen, dieses per ECP hochladen und dann fkt. auch die Zuweisung zum SMTP Dienst. Es war auch nicht möglich, dass Zert. was vorher da war, per ECP für SMTP zu aktivieren. Das witzige am Ende, es ist am Ende immer das gleiche Zert. Also wie gesagt, nun mehrfach schon beobachtet, sollte jemand den Fall mal haben.
Das wollte ich gerade beim Überfliegen des Artikels anmerken. Habe das auch schon mehrfach so erlebt, nur über die ECP importiert lies es sich dann binden.
Hallo, über ECP importieren geht ja nicht mehr, was ist der Workaround ?
Die Lösung/Workaround würde mich auch mal interessieren, weil erst heute wieder gehabt so einen Fall..Es ging nicht per powershell.Erst das manuelle importieren per ECP und dann dort die Zuweisung des SMTP Dienst. Daher wurde auch noch nicht auf das neue CU Update geupdated..
Hi,
ich habe es validiert, die Lösung ist:
Import-ExchangeCertificate -FileData ([Byte[]]$(Get-Content -Path c:\Install\cert.pfx -Encoding byte -ReadCount 0)) -Password (convertto-securestring -string „PASSWORD“ -asplaintext -force)
Und dann per ECP den SMTP einfach zuweisen. Fazit, eigentlich die gleiche Lösung wie früher über die ECP, nur das man nun per PS das Zert. hochlädt. Somit konnte ich auch ohne Probleme den SMTP Dienst an das Wildcard Zert. binden.
Moin Frank, endlich :-) Das wollte ich auch schon länger mal bauen, jetzt gibt es dann schon fertig
Vielen lieben Dank
Thank you Frank, another great article.
Dem schliesse ich mich uneingeschränkt an!
Das habe ich auch in den letzten Tagen festgestellt, es gab eine Fehlermeldung bei –RequestFile
Bei mir ging es um eine Verlängerung eines Zertifikats, analog sollte es ähnlich sein bei einer Neuerstellung.
1. Get-ExchangeCertificate | where {$_.Status -eq „Valid“ -and $_.IsSelfSigned -eq $false} | Format-List FriendlyName,Subject,CertificateDomains,Thumbprint,NotBefore,NotAfter
Thumbprint merken
$txtrequest = Get-ExchangeCertificate -Thumbprint | New-ExchangeCertificate -GenerateRequest
zum Überprüfen: $txtrequest eingeben
Nachfolgendes in einer Zeilen eingeben und abschicken:
[System.IO.File]::WriteAllBytes(‚\\exchangeserver2\C$\temp\Zertifikat\zertifikat.csr.req‘ [System.Text.Encoding]::Unicode.GetBytes($txtrequest))
jetzt hat man die Zertifikatsdatei im entsprechenden Pfad erstellt.
Ach Franky,
Was soll nur einer ohne dich machen?
Super