Назад | Перейти на главную страницу

Какие у меня есть варианты переноса сертификата LetsEncrypt с одного сервера на другой?

У меня есть сервер ubuntu, работающий через Digital Ocean, с сертификатом SSH, который я получил через LetsEncrypt.

Я пытаюсь перейти на более дешевую услугу, и мне нужно переместить сертификат на мой новый сервер. Как я могу это сделать?

Похоже, я могу отозвать сертификат на моем текущем сервере DO. Могу ли я без проблем создать новый на моем новом сервере?

Предположим, вы используете certbot инструмент для управления сертификатами Let's Encrypt, который делает большинство людей, достаточно скопировать весь /etc/letsencrypt каталог с одного сервера на другой. Все ваши сертификаты, а также конфигурация certbot находятся там. Таким образом, вы можете продолжить работу на новом сервере точно так же, как и раньше.

Я не большой поклонник предложения перенести весь каталог / 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. Настройте программное обеспечение вашего веб-сервера на новом сервере для использования сертификата / ключа в каталоге миграции.
  5. Обновите свои записи DNS. Во время распространения некоторые пользователи получают старый сервер, некоторые - новый, но оба работают нормально, потому что у них одинаковый действительный сертификат SSL.
  6. На следующий день, когда DNS будет распространен, вы сможете запустить certbot на своем новом сервере, чтобы получить обновленный сертификат, который можно продлить в любое время.
  7. Измените конфигурацию вашего веб-сервера на новом сервере, чтобы использовать новый сертификат letsencrypt.
  8. Удалите сертификат / ключ в каталоге миграции, которые больше не нужны.
  9. Удалите веб-сайт и сертификат на старом сервере.

Здесь вам следует скопировать /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 являются:

  1. /etc/letsencrypt/accounts содержит регистрационную информацию ACME. Certbot в настоящее время не поддерживает несколько учетных записей ACME и протокол как есть, это не имеет значения. Это то, что вы должны, по крайней мере, сохранить в резервной копии.

  2. /etc/letsencrypt/csr содержит CSR, который мы использовали для получения вашего сертификата.

  3. /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
}
  1. Архивные сертификаты на старых серверах
  2. Переместите их на новый сервер
  3. Распаковать в правильное место
  4. Создать символические ссылки
  5. Перенаправить домен
  6. Пробный запуск для проверки сертификатов на новом сервере.

На основе этой статьи: https://druss.co/2019/03/migrate-letsencrypt-certificates-certbot-to-new-server/

Единственное отличие letsencrypt - это показать, что вы являетесь владельцем сайта или сервера, после чего вам необходимо: - Вам нужно будет указать свой DNS-адрес на новый сервер. - Протестируйте сертификат на новом сервере