Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.


Тип статьиИнструкция
КомпетенцииАдминистратор
Необходимые праваroot
Версия платформы2.19.1/2.20
Статус
Статус
colourGreen
titleпроверено
Сложность легко
Полезные ссылкиhttps://certbot.eff.org/docs/using.html?highlight=hook#renewing-certificates
Дополнительные сведенияUbuntu 18.04/20.04, certbot 0.27.0/0.40.0, без внешнего proxy-сервера



Подсказка

При устаревании инструкции используйте описанные в ней подходы и более свежие знания в документации актуальной версии платформы и certbot. Вы также всегда можете написать на support@visiology.su с запросом о помощи или замечанием по инструкции.


Введение


Данная инструкция поможет настроить на сервере с платформой автоматический перевыпуск сертификата с помощью certbot. 

У данного метода есть свои подводные камни (о них ниже), но он достаточно прост в реализации.


1. Вводные данные

Перед началом настройки хотелось бы уточнить, что мы имеем:

  • Ubuntu 20.04;
  • Visiologi 2.20, который функционирует через HTTP.

Приступаем к настройкеНастройка происходит на виртуальной машине Ubuntu Server 20.04 x64.

Железо типовое и соответствует системным требованиям платформы для целей тестирования (см. статью системные требования).

Нет никаких дополнительных усложняющих факторов в виде настроенных VPN, работающих прокси серверов или файрволлов. Имеем простую подсеть вида 192.168.0.0/24, стандартные докер подсети и полностью типовую настройку работы платформы 2.20 на HTTP на одном сервере. 

Пожалуйста, учитывайте факторы в своей инфраструктуре, чтобы понимать, какие действия из инструкции нужно подкорректировать и как быстро решить проблемы, возникающие из-за особенностей вашей среды.


2. Установка certbot


Выполняем следующие команды:

Блок кода
languagebash
themeRDark
sudo apt update
sudo apt install certbot

Далее необходимо создать аккаунт ACME: 

Блок кода
languagebash
themeRDark
sudo certbot register --email email@server.com

Вместо email@server.com вписываем свой email. В процессе регистрации будет задано 2 вопроса. Первый это согласие на использование сервиса Let’s Encrypt :

Блок кода
languagebash
themeRDark
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

И второй это согласие на новостную рассылку:

Блок кода
languagebash
themeRDark
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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'ом (это компонент proxy платформы). Это тот самый подводный камень, о котором я писал во введении. Это можно сделать с помощью скриптов, которые запускаются до и после выпуска сертификата. Приступим.мы писали во введении. Решить эту проблему просто: остановкой контейнера proxy через pre-hook скрипт.

Закинем скрипты pre-hook и post-hook. Сами скрипты ниже:

preScript.sh:

Блок кода
languagebash
themeRDark
docker service scale visiology_proxy=0
sleep 15

В этом скрипте мы по сути останавливаем контейнер proxy для освобождения 80 порта и ждем 15 секунд, пока порт полностью не освободится.

postScript.sh:

Блок кода
languagebash
themeRDark
linenumberstrue
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/.
Также необходимо сделать их исполняемыми и изменить права:

Блок кода
languagebash
themeRDark
cd /etc/letsencrypt/
sudo chmod 777 ./preScript.sh
sudo chmod 777 ./postScript.sh
sudo chmod +x ./preScript.sh
sudo chmod +x ./postScript.sh


4. Выпуск сертификата


Теперь можно приступить непосредственно к выпуску сертификата. Выполняем следующую команду:

Блок кода
languagebash
themeRDark
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 скрипты, которые мы указали в команде при выпуске сертификата.

Задача о перевыпуске сертификата создается в кроне автоматически (/etc/cron.d/certbot) при установке certbot. Она запускается дважды в сутки и перевыпускает те сертификаты, срок действия которых истекает в течение тридцати дней. При перевыпуске будут учтены конфиги, которые лежат в папке /etc/letsencrypt/renewal/.

Если сертификатов несколько, соответственно для каждого можно написать свои скрипты и действовать по той же схеме.


5. Переключение и настройка HTTPS


После того как мы выпустили сертификат, необходимо настроить платформу для работы через HTTPS. Это можно сделать, следуя стандартной инструкции , ссылка будет нижепо переключению платформы в режим работы по HTTPS. Но есть некоторые отличия, они описано в заметке ниже до ссылки.

Примечание
titleУточнения к инструкции по настройке HTTPS

Пункты 5 и 6 не делаем совсем. Файл с паролем нам не нужен, а сертификат и ключ в папку /docker-volume/proxy скопировал скрипт postScript.sh в предыдущем шаге данной инструкции.
В 7 мы указываем путь и имя до сертификата, ключа и файла с паролем. Файл с паролем нам не нужен, эту строчку можно оставить закомментированной. А путь и имя до сертификата и ключа написать так, как указано ниже:

Блок кода
themeConfluence
linenumberstrue
ssl_certificate     /mnt/volume/fullchain.pem;
ssl_certificate_key /mnt/volume/privkey.pem;


Настройка платформы для работы через HTTPS - Случай 2. Сертификат, подписанный доверенным центром сертификации

Готово. После запуска перезапуска платформы с ключом "--https on", она начинает работать через одноимённый протокол используя наш Let'sEncrypt сертификат, который будет автоматически перевыпускаться при истечении срока годности.