Exchange Zertifikate per Shell anfordern und importieren

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:

Exchange Zertifikate per Shell anfordern und importieren

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:

CSR via Exchange Management Shell

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))
Import eines Zertifikats

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
Aktivieren des Zertifikats

Das Zuweisen der Exchange Dienste ist allerdings nach wie vor auch noch über das Exchange Admin Center möglich:

Ansicht im Exchange Admin Center

Alternativ lässt sich das Zertifikat oder auch ein Zertifikat inklusive des Privaten Schlüssels (PFX Datei) via MMC importieren:

Import und Export via MMC

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:

Ansicht im Exchange Admin Center

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)
Export und Import via Shell

18 Gedanken zu „Exchange Zertifikate per Shell anfordern und importieren“

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

    Antworten
  2. Moin Frank, endlich :-) Das wollte ich auch schon länger mal bauen, jetzt gibt es dann schon fertig

    Vielen lieben Dank

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

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

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

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

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

    Antworten
  6. 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 :(

    Antworten
    • 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

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

    Antworten
    • 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 ;)

      Antworten

Schreibe einen Kommentar