Let's Encrypt: Wildcard-сертификаты теперь доступны!
Mar 19, 2018 08:13 · 605 words · 3 minute read
Еще в прошлом году разработчики 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.