Let’sencrypt
standolone
# service nginx stop # certbot certonly --dry-run -d tst-amo.net.ua -d www.tst-amo.net.ua -d mail.tst-amo.net.ua -d cloud.tst-amo.net.ua
Программа должна отчитаться об успешной работе:
IMPORTANT NOTES:
- The dry run was successful.
Запускаем вчистовую:
# certbot certonly -d tst-amo.net.ua -d www.tst-amo.net.ua -d mail.tst-amo.net.ua -d cloud.tst-amo.net.ua
После запускаем и проверяем:
# service nginx start # service nginx status
webroot
Этот вариант не предполагает остановку сервиса nginx.
Чтобы не писать каждый раз длинную строку из опций, а еще лучше — не вспоминать о них, запишем основные настройки в файл конфигурации, который certbot ожидает найти в /etc/letsencrypt/cli.ini:
authenticator = webroot webroot-path = /home/www/ post-hook = service nginx reload text = True
Последняя директива нужна чтобы избавить нас от прелестей и красивостей ncurses.
Также нам нужно мягко перезагрузить nginx (без перерыва в обслуживании) при успешном обновлении сертификатов. Ничего не мешает в этот же момент перезапускать и другие сервисы вроде Postfix, использующие полученные сертификаты. Команды указываются через точку с запятой.
Ожидается что certbot будет создавать необходимые для проверки прав на домен файлы в подкаталогах ниже по иерархии к указанному. Вроде таких:
/home/www/.well-known/acme-challenge/example.html
Эти файлы должны будут быть доступны из сети на целевом домене по крайней мере по HTTP:
http://tst-amo.net.ua/.well-known/acme-challenge/example.html
Для следующих проверок создадим какой-то такой файл:
mkdir -p /home/www/.well-known/acme-challenge chown -R nginx:www-data /home/www/.well-known/ echo Success > /home/www/.well-known/acme-challenge/example.html
Регистрацию нужно сделать только один раз:
certbot register --email postmaster@tst-amo.net.ua
В общем случае для получения сертификата необходимо во всех блоках server добавить следующий блок до других блоков location:
location /.well-known { root /home/www/; }
Понятно, что вписывать для каждого сайта такой блок явно — это моветон, потому создадим файл /etc/nginx/acme.conf с содержанием блока выше.
# cat /etc/nginx/acme.conf location /.well-known { root /home/www/; }
Затем для каждого домена и поддомена, для которых нужно получить сертификаты, в блоке server перед всеми блоками location укажем:
include acme.conf;
Хосты-редиректоры (например, с голого домена на www) можно пропустить. ACME сервер обязан учитывать стандартную переадресацию.
Перезагрузим nginx и проверим что наш тестовый файл виден:
# service nginx reload # curl -L http://tst-amo.net.ua/.well-known/acme-challenge/example.html Success
После проверки лучше удалить тестовый файл — certbot любит удалять за собой всё лишнее, а такой файл будет мешать и вызывать сообщение об ошибке (Unable to clean up challenge directory).
rm /home/www/.well-known/acme-challenge/example.html
Получаем сертификаты.
Если нужно добавить поддомен или домен в сертификат
Если вы вдруг забыли указать поддомен www, или вам нужно добавить другой домен или поддомен в сертификат (которых может быть до 100 в одном сертификате), то это легко сделать после получения сертификата. Просто запустите команду еще раз, добавив требуемое имя:
# certbot certonly -d tst-amo.net.ua -d www.tst-amo.net.ua -d mail.tst-amo.net.ua -d cloud.tst-amo.net.ua
Вам будет безальтернативно предложено добавить этот домен в сертификат. Если хочется избежать вопросов, то можно сразу указать одобряющий такое поведение ключ:
# certbot certonly --expand -d example.com -d www.example.com -d shop.example.com
Продление
Для автоматизации продления сертификатов добавим в crontab от root одну лишь строчку (sudo crontab -e):
33 */12 * * * certbot renew --quiet --allow-subset-of-names
Согласно рекомендаций Let’s Encrypt следует пытаться обновить сертификаты два раза в день. Делать это нужно в случайным образом выбранную минуту того часа, а значит вам нужно заменить 33 в этой строке на другое число в диапазоне между 0 и 59. Либо вы можете поступить так как это делается в /etc/cron.d/certbot.
В этой команде ключ –allow-subset-of-names нужен чтобы Certbot пытался получить сертификаты для частичного набора доменов.
https://habr.com/post/318952/
https://www.digitalocean.com/community/questions/letsencrypt-failed-authorization-process
https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx.html