Knowledge Base

Bitte , um Beiträge und Themen zu erstellen.

Let´s encrypt Zertifikat unter Windows erstellen

https://blog.icewolf.ch/archive/2021/01/24/request-lets-encrypt-certificate-with-powershell.aspx

https://blog.onevinn.com/using-powershell-to-get-wildcard-certificate-from-lets-encrypt

https://poshac.me/docs/v4/Functions/New-PACertificate/

DNS Providers: https://poshac.me/docs/v4/Plugins/

 

###

Powershell:

Find-Module Posh-ACME
Install-Module Posh-ACME
Import-Module Posh-ACME

Get-PAServer
Set-PAServer LE_Prod zum testen Set-PAServer LE_STAGE verwenden
Get-PAServer

New-PAAccount -Contact emailaddress -AcceptTOS -KeyLenght 4096
New-PACertificate '*.example.com','example.com' -AcceptTOS -Contact "emailaddress" -DnsSleep 15

Nun muss in der DNS Verwaltung der Textrecord gesetzt werden. (Achtung, beim TXT Record Namen gehört bei manchen DNS Verwaltungen ein . zum Schluß)

Get-PACertificate | fl

$Cert = Get-PACertificate
$PFX = "C:\Users\username\AppData\Local\Posh-ACME\LE_Prod\08154711\LE-CN\cert.pfx"
Import-PfxCertificate -FilePath $PFX -CertStoreLocation Cert:\LocalMachine\My -Password $cert.PfxPass -Exportable

$mypwd = ConvertTo-SecureString -String "secret" -Force -AsPlainText
$Thumbprint = $Cert.Thumbprint
Get-ChildItem -Path cert:\localMachine\my\$Thumbprint | Export-PfxCertificate -FilePath C:\Users\username\AppData\Local\Posh-ACME\LE_Prod\08154711\LE-CN\exported_certificate.pfx -Password $mypwd

Submit-Renewal -AllOrders -Force -NoSkipManualDns

The standard non changed password on the PFX files is poshacme

Powershell start script in batchfile:

powershell -executionpolicy remotesigned -File renewLE.ps1

###

renewLE.ps1

Submit-Renewal -Force -NoSkipManualDns

###

You can manually renew the certificate by running the following command:
Submit-Renewal
clip_image014

As you can see, it will not renew certificates that are not about to expire yet (I believe it uses 30 days or less validity time). You can override this by running:

Submit-Renewal -Force -NoSkipManualDns

To automate the renewal, you can create a scheduled task that runs this command daily:

Create a file called C:\Cert\AutoRenewal.ps1, containing the command “Submit-Renewal” (not the -Fore option, since you don’t want to renew at every check).

Run the following commands, but first change <password> to your own password
Note: The scheduled task must run in the context of the user requesting the certificate since validation information is stored in that user’s profile.

$Trigger = New-ScheduledTaskTrigger -At 10:00am -Daily
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:\Cert\AutoRenewal.ps1"
Register-ScheduledTask -TaskName "Certificate AutoRenewal" -Trigger $Trigger -User "$env:USERDOMAIN\$env:USERNAME" -Password '<password>' -Action $Action -RunLevel Highest –Force
###

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.

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