Введение
Данная инструкция поможет настроить certbot для автоматического перевыпуска сертификата. на сервере с платформой автоматический перевыпуск сертификата с помощью certbot.
У данного метода есть свои подводные камни (о них ниже), но он достаточно прост в реализации.
1. Переключение и настройка HTTPS
Сперва необходимо настроить nginx для работы через HTTPS. Для этого переходим по ссылке и делаем как там написано:
Случай 2. Сертификат, подписанный доверенным центром сертификации
Имя приватного ключа и сертификата
Блок кода |
---|
theme | RDark |
---|
linenumbers | true |
---|
|
ssl_certificate /mnt/volume/fullchain.pem;
ssl_certificate_key /mnt/volume/privkey.pem; |
2. Установка certbot
Выполняем следующие команды:
Блок кода |
---|
|
sudo apt update
sudo apt install certbot |
Далее необходимо создать аккаунт ACME:
Блок кода |
---|
|
sudo certbot register --email email@server.com |
Вместо email@server.com вписываем свой email. В процессе регистрации будет задано 2 вопроса. Первый это согласие на использование сервиса Let’s Encrypt :
Блок кода |
---|
|
certbot register --email muba4@yandex.ru
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A |
И второй это согласие на новостную рассылку:
Блок кода |
---|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y |
На этом установка закончена.
3. Pre-hook и Post-hook скрипты
Т.к. мы будем использовать certbot standalone веб-сервер для аутентификации, необходимо освободить 80 порт, чтобы let’sencrypt мог проверить, что домен принадлежит именно нам. 80 порт у нас занят nginx'ом. Это тот самый подводный камень, о котором я писал во введении. Это можно сделать с помощью скриптов, которые запускаются до и после выпуска сертификата. Приступим.
Закинем скрипты pre-hook и post-hook. Сами скрипты ниже:
preScript.sh:
Блок кода |
---|
|
docker service scale visiology_proxy=0
sleep 15 |
postScript.sh:
Блок кода |
---|
|
sudo cp -f -H /etc/letsencrypt/live/<domainName>/fullchain.pem /docker-volume/proxy/
sudo cp -f -H /etc/letsencrypt/live/<domainName>/privkey.pem /docker-volume/proxy/
sudo chmod 777 /docker-volume/proxy/fullchain.pem
sudo chmod 777 /docker-volume/proxy/privkey.pem
sudo docker service scale visiology_proxy=1 |
1 и 2 строка. Копирование сертификата и ключа в папку /docker-volume/proxy/. <domainName> - изменить на имя домена;
3 и 4 строка. Даем права на сертификат и ключ;
5 строка. Запускаем сервис proxy.
Данные скрипты можно положить в любое удобное место, лично я положил в /etc/letsencrypt/.
Также необходимо сделать их исполняемыми и изменить права:
Блок кода |
---|
|
cd /etc/letsencrypt/
sudo chmod 777 ./preScript.sh
sudo chmod 777 ./postScript.sh
sudo chmod +x ./preScript.sh
sudo chmod +x ./postScript.sh |
4. Выпуск сертификата
Теперь можно приступить непосредственно к выпуску сертификата. Выполняем следующую команду:
Блок кода |
---|
|
sudo certbot certonly --standalone -d <domainName> --pre-hook /etc/letsencrypt/preScript.sh --post-hook /etc/letsencrypt/postScript.sh |
<domainName> изменить на своё.
В результате выполнения данной команды будет сделано следующее:
1. Запущен pre-hook скрипт, который остановит докер сервис proxy и освободит 80 порт;
2. Выпущены сертификаты и ключ;
3. Запущен post-hook скрипт, который скопирует сертификат и ключ в папку /docker-volume/proxy/, выдаст права на них и запустит докер сервис proxy.
Также будет создан конфиг для перевыпуска сертификата, он лежит в папке /etc/letsencrypt/renewal/ и включает в себя пути до сертификатов и ключа, а также в нем прописаны pre-hook и post-hook скрипты, которые мы указали в команде при выпуске сертификата.
Готово. Всё сделано. Задача в кроне создается автоматически при установке certbot. Она запускается дважды в сутки и перевыпускает те сертификаты, срок действия которых истекает в течение тридцати дней. При перевыпуске будут учтены конфиги, которые лежат в папке /etc/letsencrypt/renewal/.
Если сертификатов несколько, соответственно для каждого можно написать свои скрипты и действовать по тем же шагам.