Request Let's Encrypt Certificate with PowerShell

Hallo zusammen,

In diesem Blog Artikel zeige ich euch, wie man ein SSL/TLS Zertifikat mit PowerShell von Let's Encrypt bereitstellt.

Es braucht einen ACME Client. Für Windows stehen da mehrere Optionen zur Verfügung. Ich habe mich für eines der zwei PowerShell Module entschieden.

Find-Module Posh-ACME

Mit folgenden Befehlen wird das PowerShell Modul installiert und die cmdlets vom Modul angezeigt.

Install-Module Posh-ACME
Import-Module Posh-ACME
Get-Command -Module Posh-ACME

Es muss ein Account mit der Emailadresse angelegt werden.

Set-PAServer LE_PROD
New-PAAccount -Contact a.bohren@icewolf.ch -AcceptTOS -KeyLenght 4096

Nun kann ein Zertifikat angefordert werden. Die Validierung erfolgt über einen DNS TXT Record.

New-PACertificate edge.serveralive.ch -AcceptTOS -Contact "a.bohren@icewolf.ch" -DnsSleep 15

Den TXT Record habe ich in meiner DNS Zone in Azure gemacht. Kleiner Tipp: Den TTL möglichst tief halten. So kann man ohne Caching Probleme rasch einen neuen Versuch starten.

Nach erfolgreicher Verifikation kann man sich das Zertifikat mit folgendem Befehl anzeigen lassen.

Get-PACertificate | fl

Unter dem Pfad sind die Zertifikate abgelegt (cer, key oder PFX sowie die Certificate Chain).

Wie man sieht, ist das Zertifikat von einer Fake Intermediate ausgestellt - ich habe also das Zertifikat also von der Staging CA erhalten.

Mit Get-PACertificate wurde auch ein Pfad zum PFX File und das Password (allerdings als SecureString) mitgeliefert.

Der Import vom PFX in den Local Machine Certificate Store erfolgt mit folgenden PowerShell Befehlen:

$Cert = Get-PACertificate
$PFX = "C:\Users\Administrator\AppData\Local\Posh-ACME\acme-staging-v02.api.letsencrypt.org\17671122\edge.serveralive.ch\cert.pfx"
Import-PfxCertificate -FilePath $PFX -CertStoreLocation Cert:\LocalMachine\My -Password $cert.PfxPass -Exportable

Man beachte den Parameter "-Exportable" beim Import-PfxCertificate. Damit kann man das Zertifikat inklusive Private Key wieder exportieren.

Das Zertifikat ist nun mit dem Private Key im Certificate Store

Da nun alle Schritte vom Anfordern des Zertifikats bis zur Installation im Certificate Store funktionieren, kann das nun auf der produktiven Certification Authority ausgefürt werden.

Mit Get-PAServer sieht man, welcher Server für die Ausstellung des Zertifikats benutzt wird. Mit "LE_Prod" ist "Let's Encrypt Produktion" gemeint.

Get-PAServer
Set-PAServer LE_Prod
Get-PAServer

Nun kann das Zertifikat angefordert werden.

New-PACertificate edge.serveralive.ch -AcceptTOS -Contact "a.bohren@icewolf.ch" -DnsSleep 15

Ich lasse mir das Zertifikat anzeigen

$Cert = Get-PACertificate
$Cert | fl

Der Import in den Certificate Store erfolgt mit folgendem Befehl:

Import-PfxCertificate -FilePath $Cert.PfxFile -CertStoreLocation Cert:\LocalMachine\My -Password $cert.PfxPass -Exportable

Danach muss man das Zertifikat noch dem jeweiligen Service zuordnen. Kommt dann halt darauf an was das für ein Service ist, deshalb sehe ich in diesem Artikel davon ab.

Hier die Details vom Zertifikat

Wer will, kann auch noch den Export in ein PFX mit eigenem Passwort machen.

$mypwd = ConvertTo-SecureString -String "MySecretPFXPassword" -Force -AsPlainText
$Thumbprint = $Cert.Thumbprint
Get-ChildItem -Path cert:\localMachine\my\$Thumbprint | Export-PfxCertificate -FilePath C:\Scripts\Install\edge.serveralive.ch.pfx -Password $mypwd

Grüsse
Andres Bohren