Как и многие, я давно ждал возможности получения wildcard-сертификатов от Let's Encrypt. И вот момент настал, а мануала на хабре так и нет. Ну что ж, попробуем исправить это.
Это наиболее упрощенный мануал по настройке wildcard-сертификатов от Let's Encrypt.
Вместо CloudFlare можете использовать другой сервис, т.к. плагины есть в репозитории EPEL.
Установка certbot и плагинов
Нам нет смысла ставить последнюю версию certbot с github, т.к. нужный нам функционал появился еще в версии 0.22.
Для установки certbot и его плагинов нужно подключить репозиторий EPEL.
sudo yum install epel-release -y
После чего запустить установку certbot.
sudo yum install certbot -y
И затем установить CloudFlare плагин для certbot.
sudo yum install python2-cloudflare.noarch python2-certbot-dns-cloudflare.noarch -y
Если вы используете другой сервис, найдите его плагин при помощи yum, например для digitalocean yum list *digitalocean*
Запустите certbot один раз для создания конфигов.
sudo certbot
Настройка CloudFlare API
Для того, чтобы certbot мог автоматом продливать wildcard-сертификаты, нужно указать логин аккаунта CloudFlare и его API Key в конфиге.
Создаем файл cloudflareapi.cfg в директории /etc/letsencrypt при помощи редактора (например nano):
sudo nano /etc/letsencrypt/cloudflareapi.cfg
И пишем в нём следующее:
dns_cloudflare_email = <ваш CloudFlare логин>
dns_cloudflare_api_key = <ваш CloudFlare API Key>
АХТУНГ! Данный способ хранения API Key небезопасен, но т.к. вы используете Let's Encrypt вам должно быть все равно.
По крайней мере, можете прописать sudo chmod 600 /etc/letsencrypt/cloudflareapi.cfg для ограничения доступа на чтение.
Создание сертификата
В отличии от других способов валидации, здесь сертификат создается легко и быстро. Вместо example.org укажите свой домен.
sudo certbot certonly --cert-name example.org --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflareapi.cfg --server https://acme-v02.api.letsencrypt.org/directory -d "*.example.org" -d example.org
При первом запуске certbot может запросить у вас email-адрес для доставки уведомлений, согласиться с ToS (выбрать A) и одобрить получение спама (выбрать N).
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.org/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.org/privkey.pem
Your cert will expire on 2018-07-21. 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"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Нужный вам сертификат fullchain.pem будет находится в директории /etc/letsencrypt/live/example.org.
Настройка веб-сервера
Я не буду здесь описывать настройку веб-сервера, т.к. мой кусок конфига вряд ли подойдет вам.
Вы сами должны найти настройку SSL для вашей версии веб-сервера и CMS.
Продление сертификата
Все созданные сертификаты продливаются при помощи certbot.
sudo certbot renew
Собственно, открываем /etc/crontab.
sudo nano /etc/crontab
И добавляем строчку.
0 4 * * 2 root certbot renew
Которая означает, что каждый вторник в 4 часа проверять актуальность сертификатов через certbot.
Так же, сюда следует добавить рестарт веб-сервера, который будет использовать данный сертификат, например nginx:
10 4 * * 2 root systemctl restart nginx
Заключение
Настройка простая, но забыть её довольно легко. Поэтому сохраняйте в закладки.
Данный мануал предназначен в первую очередь для энтузиастов под свой сервер или под небольшие проекты, поэтому здесь нет особого внимания к безопасности или дополнительным настройкам.
Автор: Руслан Азнабаев