У меня есть сервер ubuntu, работающий через Digital Ocean, с сертификатом SSH, который я получил через LetsEncrypt.
Я пытаюсь перейти на более дешевую услугу, и мне нужно переместить сертификат на мой новый сервер. Как я могу это сделать?
Похоже, я могу отозвать сертификат на моем текущем сервере DO. Могу ли я без проблем создать новый на моем новом сервере?
Предположим, вы используете certbot
инструмент для управления сертификатами Let's Encrypt, который делает большинство людей, достаточно скопировать весь /etc/letsencrypt
каталог с одного сервера на другой. Все ваши сертификаты, а также конфигурация certbot находятся там. Таким образом, вы можете продолжить работу на новом сервере точно так же, как и раньше.
Я не большой поклонник предложения перенести весь каталог / etc / letsencrypt с одного сервера на другой. Предполагается, что вы размещаете только один сайт. Я также пробовал скопировать определенные файлы из / etc / letsencrypt на новый сервер, но это неудобно и подвержено ошибкам. Итак, вот мое альтернативное предложение, которое не требует ручной работы с / etc / letsencrypt, позволяет избежать простоев.
/etc/pki/tls/migration
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 разрешений для ключевого файла.Здесь вам следует скопировать /etc/letsencrypt/archive
, /etc/letsencrypt/live
, и /etc/letsencrypt/renewal
каталоги, заботясь о сохранении символических ссылок в /etc/letsencrypt/live
во время копирования.
Файлы в /etc/letsencrypt/csr
и /etc/letsencrypt/keys
просто названы ####_csr-certbot.pem
и ####_key-certbot.pem
соответственно, где ####
это увеличивающийся счетчик. Это вызовет конфликт при попытке объединить файлы с другим /etc/letsencrypt
каталог.
Я бы не стал беспокоиться о копировании других файлов в /etc/letsencrypt
на другом сервере. Возможно, вы захотите где-нибудь сделать резервную копию файлов, но они вам не понадобятся для переноса сайта на другой сервер. Если вам интересно, другие файлы в /etc/letsencrypt
являются:
/etc/letsencrypt/accounts
содержит регистрационную информацию ACME. Certbot в настоящее время не поддерживает несколько учетных записей ACME и протокол как есть, это не имеет значения. Это то, что вы должны, по крайней мере, сохранить в резервной копии.
/etc/letsencrypt/csr
содержит CSR, который мы использовали для получения вашего сертификата.
/etc/letsencrypt/keys
содержит закрытый ключ, который мы создали для вашего нового сертификата. Другая копия этого также находится в /etc/letsencrypt/archive
который вы должны скопировать.
Кое-что из этого уже было сказано, но просто чтобы дать один полный ответ. Я начал использовать некоторые сертификаты LE на общественных услугах. Варианты перемещения практически не ограничены, больше зависят от того, какой проект вы используете для запроса сертификатов. Получив сертификат, вы можете экспортировать ключ и сертификат в файл для перехода к любому серверу, который вам нравится. Вам не нужно ничего отзывать, чтобы получить новый сертификат. Учитывая короткий срок службы сертификатов LE (3 месяца) и бесплатную стоимость, большинство из тех, кого я нашел, рассматривают как одноразовые.
Я использовал проект ACMEsharp by eBekker для создания сценария PowerShell для автоматизации получения нового сертификата. Это то, что у меня есть до сих пор. В настоящее время он должен работать на веб-сервере.
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
}
На основе этой статьи: https://druss.co/2019/03/migrate-letsencrypt-certificates-certbot-to-new-server/
Единственное отличие letsencrypt - это показать, что вы являетесь владельцем сайта или сервера, после чего вам необходимо: - Вам нужно будет указать свой DNS-адрес на новый сервер. - Протестируйте сертификат на новом сервере