Настройка Let's Encrypt wildcard-сертификатов в CentOS 7 с валидацией через CloudFlare API +16


Как и многие, я давно ждал возможности получения 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 в конфиге.

Логинимся в свой CloudFlare аккаунт и заходим в профиль


Нажимаем View напротив Global API Key


Вводим пароль от аккаунта, проходим капчу и снова жмем View


Копируем свой 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

Заключение


Настройка простая, но забыть её довольно легко. Поэтому сохраняйте в закладки.

Данный мануал предназначен в первую очередь для энтузиастов под свой сервер или под небольшие проекты, поэтому здесь нет особого внимания к безопасности или дополнительным настройкам.




К сожалению, не доступен сервер mySQL