Hat jemand von euch Erfahrung mit Lets Encrypt unter Windows mit ACME-Sharp?
Ich habe ein Script welche automatisch alle 2 Monate läuft und das Zertifikat erneuern sollte.
Die erste Anforderung läuft ohne Fehler. Nach dem Ablauf von 2 Monaten und das Script automatisch ausgelöst wird, funktioniert alles Wunderbar.
Die nächste Ausführung funktioniert dann nicht mehr und zwar meldet er immer der Identifier abgelaufen ist. Neuerstellen geht nicht, da er meldet das der Identifier bereits exisitert. Einzige Lösung ist den Vault zu löschen und alles Neuerstellen zu lassen, dann funktionierts wieder 2x.
Hat jemand ähnliche Erfahrungen?
Wenns jemand interessiert, hier das Script. Wir brauchen es zusammen mit kleinen oder alten Exchange Installationen. Der grösste Teil aus dem Script kommt von hier: https://www.netometer.com/vide…icate-in-Exchange-Server/
- Import-Module ACMESharp
- function Register-FQDN
- {
- $FQDN = $args[0]
- echo "`n Creating a new identifier for $FQDN ..."
- New-ACMEIdentifier -Dns $FQDN -Alias $FQDN | select status, Expires
- echo "`n Completing the challenge for the new identifier for $FQDN ..."
- Complete-ACMEChallenge $FQDN -ChallengeType http-01 -Handler iis -HandlerParameters @{ WebSiteRef = 'Default Web Site' } | select Identifier, status, Expires *>&1 >> $acmelog
- echo "`n Submitting the new identifier for $FQDN ..."
- Submit-ACMEChallenge $FQDN -ChallengeType http-01 | select Identifier, status, Expires *>&1 >> $acmelog
- do
- {
- $auth = ((Update-ACMEIdentifier $FQDN -ChallengeType http-01).Challenges | Where-Object {$_.Type -eq "http-01"}).status
- if($auth -eq "invalid") {break}
- echo "`n Waiting for a valid authorization ... Current status is $auth"
- Start-Sleep -s 3
- }until ($auth -eq "valid")
- Update-ACMEIdentifier $FQDN | select Identifier, status, Expires *>&1 >> $acmelog
- }
- #NOTE: Uncoment and edit the lines bellow
- #----------------------------------------
- $my_email = "xy@yx.com"
- $CN = "sub1.domain.com"
- $SAN1 = "sub2.domain.com"
- #$SAN2 = "sub3.domain.com"
- #$SAN3 = ""
- #$SAN4 = ""
- $my_vault = Get-ACMEVault
- $certpath = "c:\Certificates"
- $authpath = "C:\inetpub\wwwroot\.well-known"
- $acmelog = "$($certpath)\acme_$($(get-date -format yyyy-MM-dd--HH-mm)).log"
- $SANcert_alias = "$($CN)_$($(get-date -format yyyy-MM-dd--HH-mm))"
- $SAN_pfxfile = "$($certpath)\$($SANcert_alias).pfx"
- if (-Not $my_vault)
- {
- Initialize-ACMEVault
- New-ACMERegistration -Contacts mailto:$my_email -AcceptTos
- }
- if (-Not (Test-Path $certpath)) {New-Item -Path $certpath -ItemType Directory }
- if (-Not (Test-Path $authpath))
- {
- New-Item -Path $authpath -ItemType Directory
- c:\windows\system32\inetsrv\appcmd.exe set config "Default Web Site/.well-known" -section:system.webServer/security/access /sslFlags:"None" /commit:apphost
- }
- #NOTE: Uncoment and edit the lines bellow
- #----------------------------------------
- Register-FQDN $CN
- Register-FQDN $SAN1
- #Register-FQDN $SAN2
- #Register-FQDN $SAN3
- #Register-FQDN $SAN4
- $sanarray=@()
- $sanarray+=$SAN1
- #$sanarray+=$SAN2
- #$sanarray+=$SAN3
- New-ACMECertificate $CN -Generate -AlternativeIdentifierRefs $sanarray -Alias $SANcert_alias *>&1 >> $acmelog
- Submit-ACMECertificate $SANcert_alias *>&1 >> $acmelog
- while (-Not (Update-ACMECertificate $SANcert_alias | select IssuerSerialNumber))
- {
- echo "`n Waiting for the Certificate ..."
- Start-Sleep 3
- }
- Update-ACMECertificate $SANcert_alias | select IssuerSerialNumber *>&1 >> $acmelog
- cd $certpath
- Get-ACMECertificate $SANcert_alias -ExportPkcs12 $SAN_pfxfile -CertificatePassword 'einpasswort'
- $exchver = gcm exsetup | %{$_.fileversioninfo.ProductVersion.Split("{.}")}
- switch ($exchver[0])
- {
- 8 {$exchsnapin = "Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin;"}
- 14 {$exchsnapin = "Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010;"}
- 15 {$exchsnapin = "Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn;"}
- default {$exchsnapin = "Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010;"}
- }
- Invoke-Expression $exchsnapin
- #Import-ExchangeCertificate -FileName $SAN_pfxfile -FriendlyName $SANcert_alias | Enable-ExchangeCertificate -Services "SMTP, IMAP, POP, IIS" -force
- Import-ExchangeCertificate -FileData ([Byte[]]$(Get-Content -Path $SAN_pfxfile -Encoding byte -ReadCount 0)) -FriendlyName $SANcert_alias -Password:(ConvertTo-SecureString -String 'einpasswort' -AsPlainText -Force) | Enable-ExchangeCertificate -Services "SMTP, IMAP, POP, IIS" -force
- iisreset
- #Remove-Item $authpath -Force -Recurse
- #Remove-Item $SAN_pfxfile -Force
- #Remove-Item "C:\ProgramData\ACMESharp\sysVault" -Force -Recurse -Exclude "00-VAULT",".acme.vault"