Если вы решили настроить HTTPS на ваших серверах, то думаю вам стоит воспользоваться Certbot, т.к. это простой и быстрый способ получения сертификатов.
Let’s Encrypt — это бесплатный и автоматизированный (с помощью ACME протокола) центр сертификации, а Certbot — один из многих доступных клиентов, который сильно упрощает жизнь.
Мы используем CentOS 7 и на сайте Certbot уже есть необходимые команды для установки:
sudo yum install epel-release
sudo yum install certbot
Certbot имеет систему плагинов. Наиболее многообещающий из них — nginx, однако меня смущают некоторые моменты в документации:
nginx
Плагин Nginx является экспериментальным… Nginx Web Server — в настоящее время не работает
У нас есть ряд виртуальных серверов и мне не хотелось все испортить, поэтому я решил воспользоваться другим плагином, который также хорошо подходил — webroot.
webroot
Принцип работы данного плагина прост: указываем ему на главную/root папку веб сервера, он создает там папку .well-known и кладет туда необходимые для проверки файлы, после чего клиент со стороны Let’s Encrypt проверяет их и таким образом мы подверждаем права на указанный домен. Более детально процесс описан на сайте Let’s Encrypt.
.well-known
Ниже приведу пример необходимой для генерации сертификатов команды:
certbot certonly --webroot -w /var/www/linuxadmins/example.com/current/web -d example.com
Здесь мы имеем следующие части:
certonly — при использовании данной команды Certbot лишь получит сертификаты, но не будет ничего делать с вашим веб сервером и устанавливать их;
certonly
--webroot — указываем необходимый нам плагин;
--webroot
-w — флаг для указания главной веб директории сервера. Просто указываем путь;
-w
-d — флаг для указания домена. Вы можете использовать несколько таких флагов после флага -w при условии, что они все имеют одну и ту же главную веб папку.
-d
Все сгенерированные ключи и сертификаты будут находиться в /etc/letsencrypt/live/$domain. Если вы получаете сертификат для множества доменов за раз, то тогда на выходе получите только одну папку по имени первого из указанных доменов. В нашем примере это будет /etc/letsencrypt/live/example.com.
/etc/letsencrypt/live/$domain
/etc/letsencrypt/live/example.com
Далее обновим конфигурацию виртуального сервера:
server { listen 443 ssl http2; server_name <ПЕРЕЧИСЛЕНИЕ ДОМЕНОВ ДЛЯ ИСПОЛЬЗУЕМОГО СЕРТИФИКАТА>; ssl_certificate <ПУТЬ К fullchain.pem ФАЙЛУ>; ssl_certificate_key <ПУТЬ К privkey.pem ФАЙЛУ>; }
Не забудьте перезагрузить Nginx:
sudo nginx -s reload
У Let’s Encrypt есть свои ограничения, о которых следует знать. Наиболее существенным из них является то, что время жизни сертификатов от Let’s Encrypt составляет 90 дней. Вы ведь не хотите забыть их вовремя продлить? К счастью эту часть работы можно легко автоматизировать.
Решать проблему мы будем с помощью crontab, но сначала советую выполнить следующую команду
certbot renew —dry—run
под пользователем, под которым будете настраивать crontab, и убедиться, что все отработало нормально. Это необходимо сделать т.к. одна из потенциальных проблем — права на папки, с которыми работает certbot. Если проблем нет, то выполняем crontab -e и настраиваем продление сертификатов:
crontab -e
# Certbot: продление сертификатов X */12 * * * certbot renew && service nginx reload
Внимание: замените X значением от 0 до 59.
Certbot рекомендует запускать обновление чаще чем раз в 3 месяца. Задача выше будет запускаться дважды в день. Чтобы лучше понять crontab, воспользуйтесь Crontab Guru Если ваши сертификаты будут свежими на момент запуска certbot, то он просто ничего не будет делать.
Полная настройка заняла порядка 5 минут и была весьма приятной (думаю все любят когда всё работает быстро и с первого раза), поэтому я рекомендую вам опробовать данный подход.
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies