1: Установка Certbot
Для начала нужно установить клиент Certbot.
Certbot очень активно разрабатывается, потому его пакеты в стандартных репозиториях систем быстро устаревают. Однако разработчики Certbot предлагают специальный репозиторий для Ubuntu, где можно найти актуальные версии пакетов.
Добавьте этот репозиторий:
sudo add-apt-repository ppa:certbot/certbot
Чтобы продолжить, нажмите Enter. Обновите индекс пакетов:
sudo apt update
Теперь установите пакет certbot для Apache:
sudo apt install python-certbot-apache
Теперь Certbot готов к использованию.
2: Получение SSL-сертификата
Certbot предлагает различные способы получения сертификатов SSL через плагины. Плагин Apache позаботится о реконфигурации Apache и при необходимости перезагрузит конфигурацию. Чтобы использовать этот плагин, введите:
sudo certbot --apache -d example.com -d www.example.com
Эта команда запустит certbot с плагином –apache, а флаг –d определит имена, для которых предназначен сертификат.
Если вы запускаете certbot впервые, вам будет предложено ввести адрес электронной почты и принять условия обслуживания. После этого certbot свяжется с сервером Let’s Encrypt, а затем отправит запрос, чтобы убедиться, что вы контролируете домен, для которого запрашиваете сертификат.
Если проверка пройдет успешно, certbot спросит, как вы хотите настроить HTTPS:
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
Сделайте свой выбор, затем нажмите Enter. Конфигурация будет обновлена, и Apache перезагрузится, чтобы использовать новые настройки. Клиент certbot выведет сообщение о том, что процесс был выполнен успешно и скажет, где хранятся ваши сертификаты:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2018-07-23. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- 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
Сертификаты будут загружены и установлены.
3: Проверка автоматического обновления сертификата
Сертификаты Let’s Encrypt действительны только в течение девяноста дней. Потому пользователи должны автоматизировать процесс продления сертификата. Установленный вами пакет certbot позаботится об этом, добавив сценарий обновления в /etc/cron.d. Этот скрипт запускается два раза в день и автоматически обновляет сертификат, срок действия которого истекает через тридцать дней.
Чтобы протестировать процесс обновления, вы можете выполнить сухой прогон certbot:
sudo certbot renew --dry-run
Если вы не видите ошибок, все настроено правильно. При необходимости Certbot обновит ваши сертификаты и перезагрузит Apache, чтобы активировать изменения. Если процесс автоматического обновления не срабатывает, Let’s Encrypt отправит сообщение на указанный вами адрес электронной почты, предупредив вас о завершении срока действия вашего сертификата.
4: Продление сертификатов
Если у каждого домена свой сертификат, то для продления сертификатов всё готово.
Если же у вас один сертификат со всеми возможными доменами, и вы не уверены что все домены всегда будут резолвиться на ваш сервер, то необходимо добавить ключ для пропуска ошибок проверки прав на домен при обновлении сертификата.
mkdir -p /etc/systemd/system/certbot.service.d/ tee
/etc/systemd/system/certbot.service.d/override.conf <<EOF [Service]
ExecStart= ExecStart=/usr/bin/certbot -q renew --allow-subset-of-names EOF
systemctl daemon-reload
Если этого не сделать и какой-то домен уйдет с вашего сервера, то вы рискуете остаться вообще без сертификатов: по умолчанию Certbot не пытается получить сертификат для неполностью подтвреждённого набора доменов.
Если нет systemd…
Если вы не пользуетесь systemd, то нужно дополнить другой файл:
sed -i 's/-q renew/-q renew --allow-subset-of-names/' /etc/cron.d/certbot
grep --color allow-subset-of-names /etc/cron.d/certbot
Если нет такого файла…
Если вы устанавливали Certbot вручную, то добавим в crontab
от root
одну строчку:
42 */12 * * * certbot renew --allow-subset-of-names
Нужно заменить 42
в этой строке на случайное число в диапазоне между 0
и 59
.
crontab -l | sed s/^42/$((RANDOM % 60))/ | crontab
Certbot будет пытаться обновить сертификаты два раза в день в случайную минуту часа.