Let’s Encrypt
Для генерации сертификатов для сайтов, доступ к которым закрыт изнутри (например, внутренний портал, скрытый за vpn),
можно использовать certbot с типом проверки dns-01. Подробнее в документации.
В этом случае certbot попросит добавить определённую TXT запись в DNS.
Это можно сделать через панель хостинга, где управляется DNS. Либо попросить внести админа.
Установка certbot
Установка описана в документации.
certonly и renew
Команда certonly получает новые сертификаты. Она не трогает серверы, не перенастраивает веб сервер.
Команда renew проверяет все сертификаты и продлевает те, которые заканчиваются.
Для certbot renew не надо указывать параметры, так как команда сама прочитает сохранённые ранее параметры.
Генерация сертификата
Для генерации сертификата выполнить:
certbot certonly \
-d my-site.com \
--server https://acme-v02.api.letsencrypt.org/directory \
--preferred-challenges dns-01 \
--agree-tos \
--email admin@example.com
Параметры (список возможных параметров)
certonly— получить сертификаты без установки-n— неинтерактивный режим. Для неинтерактивного режима нужно обязательно указать хуки--manual— интерактивный режим (то есть cli будет вопросы задавать) либо на хуках-d— список доменов, для которых надо выпустить сертификаты--agree-tos— автоматически согласиться с соглашением--server— сервер, который будет использовать CertBot (подробнее)--email— регистрационный Email--register-unsafely-without-email— не запрашивать Email при регистрации--preferred-challenges— выбор валидации. Для wildcard подходит только dns-01
Валидация попросит прописать DNS TXT. Надо прописать подобное:
Проверить, что корректно прописалось, можно так:
Либо любым dig online сервисом, где указать
- домен:
_acme-challenge.my-site.com - тип записи:
TXTилиANY
Если валидация пройдёт, то команда выдаст примерно такой ответ
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/my-site.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/my-site.com/privkey.pem
Your cert will expire on 2019-01-01. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
Полученные файлы ключей
У бота интересная система каталогов:
- всё хранится в папке
/etc/letsencrypt - ключи создаются в папке
/etc/letsencrypt/archive/my-site.com(в зависимости от домена) - в папке
/etc/letsencrypt/live/my-site.com(в зависимости от домена) находятся симлинки на обновленные сертификаты. Бот сам занимается перелинковкой - В настройки программ (например, для
nginx) прописываются пути до симлинков. Например, для того жеnginxвыглядело бы так:
server {
ssl_certificate /etc/letsencrypt/live/my-site.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/my-site.com/privkey.pem;
}
Благодаря такой схеме при обновлении не придется менять настройки программ. Бот сам обновит линки.
Использование файла-конфига
Для удобства все параметры можно прописать в certbot-config.ini файл
email = admin@example.com
authenticator = manual
domain = my-site.com
agree-tos = True
preferred-challenges = dns-01
server = https://acme-v02.api.letsencrypt.org/directory
А после этого запустить:
webroot
Позволит выполнять обновление сертификата в автоматическом режиме если сайт доступен наружу.
- Заводим отдельный каталог. Владелец -
root, права755 - Прокидываем через
volumeвnginx - Настраиваем nginx для проверки челенджей на отдельный root.
Let's Encryptне ходит по редиректам, поэтому надо настраивать 80 порт - Перезапуск nginx контейнера
- Конфиг для
certbot: - Запуск обновления сертификата (
renew, а неcertonly) - Автопродление через cron
Комментарии
- У серверов Let’s Encrypt нет постоянных IP, поэтому в фаервол прописывать нечего.
- wildcard сертификат (то есть сертификат вида
*.my-syte.com) можно валидировать только черезdns-01. - Не обязательно ставить
certbotна той машине, для которой нужны сертификаты. Сертификаты можно сгенерировать отдельно, а потом перенести файлы на нужную машину