Let's Encrypt: Wildcard-сертификаты теперь доступны!

Mar 19, 2018 08:13 · 605 words · 3 minute read nginx ssl

Еще в прошлом году разработчики Let’s Encrypt обещали внедрить в январе 2018 года поддержку возможности генерации wildcard-сертификатов для доменов и вот, наконец, этот день настал. Давайте разберемся, как сгенерировать wildcard-сертификат Let’s Encrypt для всех поддоменов!

Говорить о важности данного нововведения, думаю, будет лишним. Всем известно, что ранее для генерации корректных бесплатных ssl-сертификатов от Let’s Encrypt для нескольких поддоменов, нужно было все их перечислить с помощью параметра -d. Например, для генерации сертификатов, которые используются на окружении разработчиков, мне приходилось ранее запускать такую команду:

certbot certonly -d eddev.cf -d www.eddev.cf \
    -d roman.eddev.cf -d www.roman.eddev.cf \
    -d nick.eddev.cf -d www.nick.eddev.cf \
    -d anton.eddev.cf -d www.anton.eddev.cf \
    -d andrey.eddev.cf -d www.andrey.eddev.cf

При добавлении нового разработчика, сертификаты приходилось перевыпускать, добавляя к списку еще пару доменов - не самое рациональное использование времени.

Теперь можно все сделать гораздо проще и быстрее - прежде всего, убедитесь, что ваш клиент поддерживает протокол ACME второй версии (v2). Список таких клиентов доступен по этой ссылке. Разработчики рекомендуют использовать Certbot клиент (если быть точным - Certbot >= 0.22.0). Так как пакет нужной версии присутствует далеко не во всех репозиториях, то установить его стандартным менеджером пакетов (apt/aptitude/apt-get и т.д.) не выйдет (по крайней мере, на сегодняшний день). Но, в любой ситуации можно найти варианты, и эта не является исключением:

  • можно воспользоваться docker-образом со свежей версией certbot, как написано здесь;
  • можно использовать плагин manual (наш вариант);
  • можно подождать появления пакетов в репозитории.

Установить плагин manual можно с помощью certbot-auto, для этого выполняем команды:

wget https://dl.eff.org/certbot-auto && chmod a+x certbot-auto

certbot-auto использует те же флаги (параметры), что и хорошо знакомый нам certbot; кроме того, он некоторые свои зависимости и обновляет код клиента до последней версии (что нам и нужно) автоматически.

Команда с использованием плагина manual для генерации бесплатных ssl-сертификатов будет выглядеть примерно так:

./certbot-auto certonly --manual -d *.eddev.cf -d eddev.cf \
    --preferred-challenges dns-01 \
    --server https://acme-v02.api.letsencrypt.org/directory

Примечание. При первом запуске будут также установлены все необходимые зависимости (нужно будет подтвердить установку нажатием y).

В моем случае, первый блин вышел комом запуск команды завершился ошибкой:

Could not choose appropriate plugin: Too many flags setting configurators/installers/authenticators 'webroot' -> 'manual'
Too many flags setting configurators/installers/authenticators 'webroot' -> 'manual'

И действительно, ранее на этом компьютере я обновлял сертификаты с помощью плагина webroot, и даже прописал его в конфигурационном файле /etc/letsencrypt/cli.ini:

authenticator = webroot
webroot-path = /var/www/html
post-hook = service nginx reload
text = True

Приводим данный конфигурационный файл в следующему виду (меняем authenticator и добавляем server):

authenticator = manual
server = https://acme-v02.api.letsencrypt.org/directory
webroot-path = /var/www/html
post-hook = service nginx reload
text = True

Опять запускаем команду для генерации сертификатов:

./certbot-auto certonly -d *.eddev.cf -d eddev.cf \
    --preferred-challenges dns-01

В процессе нужно будет выполнить несколько стандартных действий (ввести или подтвердить существующий почтовый ящик, согласиться с условиями использования и т.д.) и добавить в DNS пару TXT-записей для перечисленных доменов. Выглядеть это будет примерно так (вывод сильно сокращен):

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
...

Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for eddev.cf
dns-01 challenge for eddev.cf

...
-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.eddev.cf with the following value:

fAXDHivfJTlzam0GGwxogvM1pdtnsh2CvJc9LUuNg1c

Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue

-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.eddev.cf with the following value:

48B-49zYhnasCoxy7VtZOWmMtfEZFG24j7L6wWkwmiE

Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue

Waiting for verification...
Cleaning up challenges
Running post-hook command: service nginx reload

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/eddev.cf/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/eddev.cf/privkey.pem
...

Далее с новыми бесплатными сертификатами от Let’s Encrypt можно работать как и раньше, например, использовать в связке с web-сервером Nginx.

tweet Share