Прикручиваем бесплатный SSL-сертификат от Let’s Encrypts к “Битрикс: Веб-окружение”
Продолжаем разбираться с “Битрикс: Веб-окружение”. В прошлой статье разобрались, с установкой и настройкой. В этой расскажу, как получить и привязать бесплатный SSL-сертификат от Let’s Encrypt в “Битрикс: Веб-окружение”.
Получаем бесплатный SSL-сертификат
Для управления выдаваемыми сертификатами у Let’s Encrypt есть специальное решение под названием certbot. Подробную документацию можете найти на официальном сайте, а я просто покажу рабочую схему.
Первым делом:
1 2 | # yum -y install yum-utils # yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional |
И ставим, собственно, сам
certbot
.
1 | # yum install certbot |
На этом подготовительный этап завершен.
Теперь собственно попросим выдать нам сертификат. Следующий момент, метод который я использую подразумевает, что будет использован собственный механизм от Let’s Encrypt, который работает через 443 порт, на котором у нас висит nginx. Способов обхода масса, самый простой остановить nginx, получить сертификат и запустить заново.
1 | # systemctl stop nginx |
Запрашиваем сертификат.
yourdomain.ru
замените на ваш домен.
1 | # certbot certonly --standalone -d yourdomain.ru -d www.yourdomain.ru |
Ответив на несколько простых вопросов вы получите сообщение об успехе.
Вот и все, наши сертификаты готовы. Находятся они в
/etc/letsencrypt/live/yourdomain.ru/
Добавляем SSL-сертификаты к Битрикс
Дело за малым, осталось привязать сертификаты к нашему сайту. Если у вас один сайт в веб-окружении, то нам понадобится файл
/etc/nginx/bx/conf/ssl.conf
. Открываем файл, находим строки:
1 2 | ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/cert.pem; |
Меняем пути на наши сертификаты.
1 2 | ssl_certificate /etc/letsencrypt/live/yourdomain.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.ru/privkey.pem; |
Если у вас несколько сайтов, то делаем следующие шаги.
Сначала создадим конфиг под сайт.
1 | # cp /etc/nginx/bx/conf/ssl.conf /etc/nginx/bx/conf/ssl.yourdomain.ru.conf |
Именно в нем указываем пути к нашим сертификатам, так же как описано выше.
Затем находим файл
/etc/nginx/bx/site_avaliable/bx_ext_ssl_yourdomain.ru.conf
и в нем меняем:
1 | include bx/conf/ssl.conf |
на
1 | include bx/conf/sl.yourdomain.ru.conf |
Сохраняем файл и перезапускаем nginx.
1 | # systemctl restart nginx |
Перейдите на https://yourdomain.ru и убедитесь, что все работает.
Далее в меню веб-окружения перейдите
6. Manage sites in the pool
,
5. Change https settings on site
. Выберите ваш домен и отключите доступ по http.
Все, теперь ваш сайт работает по
https
и заметьте, совершенно бесплатно. Настраиваем автоматическое продление сертификата
Естественно, что бесплатный SSL-сертификат не может быть идеальным. Срок действия сертификатов от Let’s Encrypt 90 дней, против года для платных. К счастью, это не такая уж и большая проблема. Стандартными механизмами предусмотрено автоматическое продление. Для этого надо выполнить команду:
1 | # certbot renew |
После этого, все сертификаты которые истекают в ближайшие 30 дней будут обновлены. Есть следующая особенность, для обновления используется тот же механизм, что и для получения. В нашем случае это
--standalone
режим, который требует отключения nginx, для работы по 443 порту. Но и это предусмотрено – для
certbot
можно указать параметры
--pre-hook
и
--post-hook
, которые выполнят системные команды перед и после работы
certbot
. Таким образом наша строка обновления сертификатов приобретает следующий вид:
1 | # certbot renew --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx" |
Запустите с указанием дополнительного параметра
--dry-run
(прогонит процесс в холостую) и убедитесь, что ошибок нет.
1 | # certbot renew --dry-run --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx" |
Если все отлично, то добавим задание в cron, которое, скажем, раз в сутки в 2:16 (время сами выберите) ночи будет проверять и при необходимости обновлять наши сертификаты:
1 | # crontab -e |
и добавляем задание
1 | 16 2 * * * /usr/bin/certbot renew --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx" >> /var/log/renew.log |
13:26
Вот за такую статью не лень и зарегистрирооваться чтобы сказать: спасибо!
10:51
Спасибо
16:20
Спасибо вам, добрый человек
16:32
hl3u6o
12:43
g5wr4a
20:21
nnrzjq
14:18
Отличная статья, спасибо! Актуально и в 2024