Let´s encrypt Zertifikat unter Windows erstellen
Zitat von mpca am 22. Dezember 2021, 9:34 Uhrhttps://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-ACMEGet-PAServer
Set-PAServer LE_Prod zum testen Set-PAServer LE_STAGE verwenden
Get-PAServerNew-PAAccount -Contact emailaddress -AcceptTOS -KeyLenght 4096
New-PACertificate '*.example.com','example.com' -AcceptTOS -Contact "emailaddress" -DnsSleep 15Nun 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 $mypwdSubmit-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
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 -NoSkipManualDnsTo 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-ACMEGet-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 -ExportableMan 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
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-ACMEGet-PAServer
Set-PAServer LE_Prod zum testen Set-PAServer LE_STAGE verwenden
Get-PAServerNew-PAAccount -Contact emailaddress -AcceptTOS -KeyLenght 4096
New-PACertificate '*.example.com','example.com' -AcceptTOS -Contact "emailaddress" -DnsSleep 15Nun 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 $mypwdSubmit-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
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 -NoSkipManualDnsTo 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.
Import-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