将我的 LetsEncrypt 证书从一台服务器移动到另一台服务器有哪些选择?

将我的 LetsEncrypt 证书从一台服务器移动到另一台服务器有哪些选择?

我有一个通过 Digital Ocean 运行的 ubuntu 服务器,它具有我通过 LetsEncrypt 获得的 SSH 证书。

我正在尝试切换到更便宜的服务,并且需要将证书移至我的新服务器。我该怎么做?

看来我可以撤销当前 DO 服务器上的证书。然后我可以在新服务器上顺利创建新证书吗?

答案1

其中一些已经说过了,但只是为了给出一个完整的答案。我已经开始在公共服务上使用一些 LE 证书。移动选项几乎不受限制,更多地取决于您用于请求证书的项目。获得证书后,您可以将密钥和证书导出到文件中,以便移动到您喜欢的任何服务。您不需要撤销任何内容即可获得新证书。由于 LE 证书的寿命短(3 个月)且免费,我发现大多数人将它们视为一次性用品。

我使用了 eBekker 的 ACMEsharp 项目来构建 powershell 脚本,以自动获取新证书。这是我目前所拥有的。它目前必须在 Web 服务器上运行。

https://github.com/ebekker/ACMESharp

## 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
}

答案2

假设您正在使用该certbot工具来管理 Let's Encrypt 证书(大多数人都这样做),那么将整个/etc/letsencrypt目录从一台服务器复制到另一台服务器就足够了。您的所有证书以及 certbot 配置都在那里。因此,您可以像以前一样继续在新服务器上工作。

答案3

我不太赞成将整个 /etc/letsencrypt 目录从一台服务器移动到另一台服务器的建议。它假设您只托管一个站点。我也尝试过将 /etc/letsencrypt 中的特定文件复制到新服务器,但这样做很麻烦,而且容易出错。所以这是我的替代建议,它不需要手动修改 /etc/letsencrypt,可以避免任何停机时间。

  1. 将站点文件、数据等复制到新服务器
  2. 在新服务器上,为临时证书/密钥创建一个目录,我认为“迁移”是一个合适的名称,例如/etc/pki/tls/migration
  3. 在迁移目录中创建一个文件name-of-site-fullchain.pem,然后将旧服务器上的证书文件的内容从 复制并粘贴/etc/letsencrypt/live/name.of.site/fullchain.pem到其中。对密钥执行相同操作。name-of-site-privkey.pem在迁移目录中创建并从 复制/粘贴/etc/letsencrypt/live/name.of.site/privkey.pem。您可能还需要在密钥文件上设置 600 权限。
  4. 在新服务器上配置您的 Web 服务器软件以使用迁移目录中的证书/密钥。
  5. 更新您的 DNS 记录。在传播过程中,一些用户会获取旧服务器,一些用户会获取新服务器,但两者都可以正常工作,因为它们具有相同的有效 SSL 证书。
  6. 第二天,当 DNS 传播完成后,您将能够在新服务器上运行 certbot 来获取更新的证书,您可以随时更新该证书。
  7. 更改新服务器上的 Web 服务器配置以使用新的 Letsencrypt 证书。
  8. 删除迁移目录中不再需要的证书/密钥。
  9. 删除旧服务器上的网站和证书。

答案4

  1. 在旧服务器上存档证书
  2. 将其移至新服务器
  3. 解压到正确位置
  4. 创建符号链接
  5. 重定向域名
  6. 试运行以验证新服务器上的证书。

根据本文:https://druss.co/2019/03/migrate-letsencrypt-certificates-certbot-to-new-server/

相关内容