Это наиболее упрощенный мануал по настройке 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
Заключение
Настройка простая, но забыть её довольно легко. Поэтому сохраняйте в закладки.
Данный мануал предназначен в первую очередь для энтузиастов под свой сервер или под небольшие проекты, поэтому здесь нет особого внимания к безопасности или дополнительным настройкам.
Комментарии (22)
dragoangel
23.04.2018 07:18Все таки я считаю что верификация через через http безопаснее, так могут и контроль над DNS украсть — этот метод был разработан для дата центров которые предоставляют там всякие cPanel и тд, им он и вправду подходит, а если у вас у самих есть доступ к установке пакетов и их настройке — лучше это делать через http но если кто то настойчиво хочет вот эще hook только для dns.he.net: github.com/angel333/certbot-he-hook
Nexon
23.04.2018 07:30Я уже писал в статье, что мануал не затрагивает безопасность, т.к. это всё таки Let's Encrypt, его вряд ли будут использовать те, кто действительно обеспокоен безопасностью своей организации.
Тем не менее, CloudFlare API работает через HTTPS.
The Cloudflare API is a RESTful API based on HTTPS requests and JSON responses.
dragoangel
24.04.2018 08:56я знаю как работают нынешние api, и я не о том что трафик могут перехватить — я о том варианте когда вот предположим у вас найдут уязвимость в вашем сайте, сайт стоит на машине с certbot валидирующий по dns, смогут загрузить php shell и увидят конфиг certbot с ключами от dns api =) тут вы поймете где вы ошиблись, тут нужно трезво понимать что сам вебсервер не должен быть настроен на валидацию сертификатов, нужен отдельный proxy который будет валидировать dns, и делать https offloading — тогда хоть ключи от api даже при взломе сайта останутся в надежном месте. Через ключи api они будут делать с вашим dns все что заходят. По поводу
т.к. это всё таки Let's Encrypt, его вряд ли будут использовать те, кто действительно обеспокоен безопасностью своей организации
я с вами в корне не согласен: люди которые не обеспокоены своей безопасность — это те 50% обычного http трафика которые еще не юзают LetsEncrypt и для них нецелесообразно или дорого покупать сертификаты. Я вообще не вижу смысла покупать SSL сертификаты платить за «подтверждение» того что я это я, когда я и так без оплаты могу доказать что я это я. Единственный смысл приобретения сертификатов когда дело заходит не про обычные сертификаты: в случае если вам нужны сертификаты для подписи софта, или с расширенными параметрами такие как у платежных систем, банков и крупных организаций — которые кроме лейблов несут кучу юридической фичи типа «гарантий», «страховок» и прочего.Nexon
24.04.2018 09:27Если вам загрузят php shell, то последнее о чем стоит беспокоиться это API Key от CloudFlare.
BTW, я не использую PHP на бекенде.
Единственный смысл приобретения сертификатов когда дело заходит не про обычные сертификаты: в случае если вам нужны сертификаты для подписи софта, или с расширенными параметрами такие как у платежных систем, банков и крупных организаций — которые кроме лейблов несут кучу юридической фичи типа «гарантий», «страховок» и прочего.
Мне шифрование вообще не нужно, я его для HTTP2 сделал.
Lynn
24.04.2018 08:37Wildcard нельзя провалидировать по http. Только через DNS-01
dragoangel
24.04.2018 08:40Я знаю что wildcard нельзя делать через http, но в том то и дело что зачем вам wildcard через http? :)
Lynn
24.04.2018 11:28> Все таки я считаю что верификация через через http безопаснее
А к чему тогда была эта фраза?
vesper-bot
23.04.2018 08:58Помнится, у certbot есть плагин к nginx, который его релоадит автоматом, если certbot renew вернул новый сертификат. Так что если настроить плагин, можно и не делать вторую задачу с nginx reload.
Asten
23.04.2018 20:05не сочтите за рекламу, но я писал про получение wildcard и вроде бы в 1 строку все делается.
habrahabr.ru/post/352720
MikFoxi
24.04.2018 09:28А после установки certbot он сам как в дебиане не прописывается в /etc/cron.d/certbot? В дебиане прописывается и каждый день ломится продлевать сертификаты.
Nexon
24.04.2018 09:30Нет, на CentOS 7 такого не замечено. На их месте правильнее было бы полноценный certbotd.service сделать.
vesper-bot
24.04.2018 09:58certbot это же не служба, незачем ему быть постоянно запущенному, а запускаться раз в сколько-то — для этого как раз и нужен крон.
gudvinr
Стоит отметить, что certbot хоть и официальный, но непомерно раздутый и на лоукост корыте с 256МБ RAM может просто не запуститься, например.
acme.sh довольно функциональный и попроще для аудита, чтобы понять, что та версия, что у вас никуда не будет отправлять ключи. И к ресурсом не столь требовательный.
Nexon
Я не встречал VPS с 256МБ.
Самая дешевая VPS на том же Hetzner Cloud идет с 2ГБ на борту.
gudvinr
Мир не ограничен хецнером, линоде и ДО.
На LowEndBox такого навалом, например.
Nexon
Там сайт на WordPress и реселлинг по заявкам. Хорошая шутка, оценил.