Algo disto já foi dito, mas apenas para dar uma resposta completa. Eu comecei a usar alguns certificados de LE em serviços públicos. As opções de movimentação são praticamente irrestritas, dependendo mais de qual projeto você está usando para solicitar os certificados. Depois de obter o certificado, você pode exportar a chave e o certificado para um arquivo para mover para qualquer serviço que desejar. Você não deve precisar revogar nada para obter um novo certificado. Com o curto tempo de vida de LE certs (3 meses) e custo livre, eles estão sendo tratados como descartáveis pela maioria que eu encontrar.
Eu usei o projeto ACMEsharp by eBekker para criar um script PowerShell para automatizar a obtenção de um novo certificado. Isso é o que eu tenho até agora. Atualmente, ele deve ser executado no servidor da Web.
## This requires the ACMESharp module from EBekker
#Import-Module AcmeSharp
$dns = "www.example.com"
$webRoot = "C:\inetpub\wwwroot"
$idRef = "$($dns.Replace('.','-'))-$(Get-Date -Format "yyyy-MM-dd_HH-mm")"
$certRef = "cert-$($dns.Replace('.','-'))-$(Get-Date -Format "yyyy-MM-dd")"
Import-Module AcmeSharp
Write-Host "Getting a new challenge"
New-ACMEIdentifier -Dns $dns -Alias $idRef | Out-Null
$challanges = Complete-ACMEChallenge -IdentifierRef $idRef -ChallengeType http-01 -Handler manual
$httpChallenge = ($challanges.Challenges | Where-Object {$_.Type -like 'http-01'}).Challenge
Write-Host "Creating challenge folder path"
New-Item -ItemType Directory -Path "$webRoot\$($httpChallenge.FilePath)" | Out-Null
$challengeFilePath = "$webRoot\$($httpChallenge.FilePath)\Default.htm"
if (Test-Path -Path $challengeFilePath) {
Remove-Item -Path $challengeFilePath -Force
}
Write-Host "Adding Challenge text to the reuqested path"
Add-Content -Path $challengeFilePath -Value $httpChallenge.FileContent -Force | Out-Null
Write-Host "Waitin 15 sec..."
Start-Sleep -Seconds 15
Write-Host "Submitting Challenge"
Submit-ACMEChallenge -IdentifierRef $idRef -ChallengeType http-01 -Force | Out-Null
Write-Host "Waiting 15 sec..."
Start-Sleep -Seconds 15
$id = Update-ACMEIdentifier -IdentifierRef $idRef
if ($id.Status -eq "pending") {
Write-Host "Challenge still pending, waiting 30 sec and retrying"
Start-Sleep -Seconds 30
Update-ACMEIdentifier -IdentifierRef $idRef
}
if ($id.Status -ne "valid") {
throw "Identifier could not be validated."
}
else {
Write-Host "Challenge appears completed. Building cert"
New-ACMECertificate -IdentifierRef $idRef -Alias $certRef -Generate | Out-Null
Submit-ACMECertificate -CertificateRef $certRef | Out-Null
Start-Sleep -Seconds 15
Update-ACMECertificate -CertificateRef $certRef
Get-ACMECertificate -CertificateRef $certRef -ExportKeyPEM C:\SSL\$dns.key.pem -ExportCertificatePEM C:\SSL\$dns.crt.pem -ExportPkcs12 C:\SSL\$dns.pfx
#Install Cert
#Install-ACMECertificateToIIS -Certificate $certRef
}