BitrixEnv и Let'sEncrypt SSL-Сертификаты

Эта статья является компиляцией моего руководства для установки в BitrixEnv SSL-сертификата от Comodoруководства на хабре про настройку Let's Encrypt для Bitrix в обычной LAMP-среде и руководства Let's Encrypt на CentOS7. К каждому домену сайта, кроме алиасов вида www.sub.example.com  к домену sub.example.com или www.example.com  к домену example.com, необходимо проводить операцию отдельно. Можно, конечно, выпустить сертификат единый для нескольких доменов, но на мой взгляд это усложнит администрирование.

Обращаю внимание, что описанный способ не имеет официальной поддержки BitrixVM и является только моей интерпритацией того, как это должно быть настроено, моё чувство прекрасного.

Let’s Encrypt — центр сертификации, начавший работу в бета-режиме с 3 декабря 2015 года, предоставляющий бесплатные криптографические сертификаты X.509 для TLS шифрования (HTTPS). Процесс выдачи сертификатов полностью автоматизирован (Источник).

Проводим настройку

Для начала зададим доменное имя, на которое будем получать сертификат:

SSLDOMAIN=example.com

Ставим официальный клиент Let'sEncrypt, CertBot с GitHub

cd /opt
git clone https://github.com/certbot/certbot

Пропишем certbot-auto в список системных утилит из сообращений удобства:

ln -s /opt/certbot/certbot-auto /usr/local/bin/certbot-auto

Сгенерируем сертификат:

#certbot-auto -d $SSLDOMAIN --nginx --agree-tos --email admin@$SSLDOMAIN

Тут выбираем Easy

Всё хорошо, если мы видим

 

Вообще, судя по тестам модуль nginx в certbot без проблем раотает с BitrixEnv, но если по каким-то причинам, вы не увидели сообщения, можно воспользоваться папкой публикации, но такой метод работает только с сайтами битрикс типа kernel:
#certbot-auto certonly -a webroot --webroot-path=/home/bitrix/ext_www/$SSLDOMAIN/ -d $SSLDOMAIN -d www.$SSLDOMAIN --agree-tos --email admin@$SSLDOMAIN

 

Проверяем, что сейчас конфиг nginx рабочий и никто его не испортил, пока что мы не производили никаких действий с сервером:

nginx -t

Ответ должен быть примерно таким:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Вносим конфигурацию в конфигурационный файл сайта

Можно сделать это sed'ом, но я такой специалист по нему, что не могу порекомендовать на продакшне
## sed -e "s/bx\/conf\/ssl.conf/ssl\/$SSLDOMAIN.conf/g" /etc/nginx/bx/site_enabled/bx_ext_ssl_$SSLDOMAIN.conf

открываем файл для редактирования

nano /etc/nginx/bx/site_enabled/bx_ext_ssl_$SSLDOMAIN.conf

Закомментируем строчку со ссылкой на стандартный файл ssl-конфигурации и добавим новую

#include bx/conf/ssl.conf;
include ssl/$SSLDOMAIN.conf

Создаём новый конфигурационный файл ssl для сайта:

echo "keepalive_timeout 70;
keepalive_requests 150;
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2:!EDH+aRSA;
ssl_certificate /etc/letsencrypt/live/$SSLDOMAIN/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/$SSLDOMAIN/privkey.pem;" > /etc/nginx/ssl/$SSLDOMAIN.conf

Данная конфигурация обеспечивает работу сертификата класса «А-» по результатам HTTPS-теста от SSLLabs

Проверяем, не содержит ли конфигурационный файл nginx ошибок

nginx -t

Перезапускаем nginx

service nginx restart

Добавляем в cron правило автоматического обновления сертификатов

echo "30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/letsencrypt-certbot-renew.log
35 2 * * 1 service nginx restart" >> /var/spool/cron/root

Эта команда создаст cron-задачу, которая каждый понедельник будет выполнять автоматическое продление letsencrypt сертификатов в 2:30 и перезагружать nginx в 2:35. Вся информация об обновлении будет логироваться в /var/log/letsencrypt-certbot-renew.log.

Наслаждаемся работающим SSL-сертификатом на вашем домене.

 

Такая конфигураця спокойно переживает обновление ОС, обновление BitrixEnv, создание, удаление новых доменов. В теории, ломаться ничего не должно.

Какие проблемы могут возникнуть при дальнейшей эксплуатации, чисто в теории?

  • Несрабатывание автопродление сертификата.
    Читаем ошибки /var/log/letsencrypt-certbot-renew.log
  • Пропадание SSL-сертификата либо подмена его на сертификат «по-умолчанию»
    Проверяем не изменился ли /etc/nginx/bx/site_enabled/bx_ext_ssl_$SSLDOMAIN.conf
  • Невозможность запуска nginx.
    По неведомой причине кто-то внёс изменения в файл /etc/nginx/ssl/$SSLDOMAIN.conf и разрушил его.

В ближайшее время я планирую затестировать данное решение на продакшне.

  • Добрый день! Подскажите пожалуйста. Как раз несколько дней пытаюсь решить вопрос с Lets encrypt сертификатом. На хостинге hosting.energy при создании сайта dommeb.com.ua подключил бесплатный Lets encrypt из Isp панели. Все было хорошо несколько дней, проходил тесты SSL ssllabs.com/ssltest/analyze.html на А+. Пробовал загрузить с мобильного на Android 2.3.6 с стандартного браузера и Maxton - появлялось только предупреждения о ненадежности сертификата , а дальше можно нажать Продолжить и сайт был доступен.

    Неделю назад заметил, что при загрузке с мобильного и тестов на редиректы (поставил в настройках домена на хостинге редиректы с http-https) происходит добавление в url :443 (название SSL порта). И сайт не доступен при загрузке (надпись ошибки).

    Написал в хостинг, решили в течении нескольких дней вопрос. Написали "Исправили конфигурации Nginx относительно редиректов, в конфиги закралась ошибка (вероятно, из-за панели управления) и было 2 редиректа."

    :443 уже не дописывался с мобильного и при тесте на редиректы.
    Но сайт по прежнему не грузился, как с появлением этих двойных редиректов :443 (ошибка на Android 2.3.6 сайт не доступен при загрузке).

    Посмотрел ssl тест, тоже А+ результат, но появилась ошибка в подпункте Handshake Simulation No SNI 2Android 2.3.7 No SNI 2 Server sent fatal alert: handshake_failure

    Погуглил по этой ошибке:
    Здесь про эту ошибку и решение пишут talk.plesk.com/threads/https-websites-not-loading-in-ie.338346/ Передал всю информацию в тех поддержку хостинга.

    Несколько дней переписывался с хостингом, говорят ничего в конфигурации настроек хостинга не меняли, используют стандартный плагин Lets Encrypt сертификата. И они не гарантируют работу SSL от LetsEncryt на устаревших платформах. Предложили выделенный IP за 1.5$ в месяц.
    Хотя несколько дней назад все работало и правок не было на обеих сайтах (все данные в браузерах очищал). А сам сайт хостинга (тоже на этом сертификате, нормально и сейчас грузится с с мобильного и даже без предупреждения)

    Сайты на виртуальном хостинге, без выделенного IP. Один сайт сделал на Opencart с Lets encrypt сертификатом, все было в порядке. Второй тестовый на WordPress - все было тоже хорошо с android 2.3.6. Собирался переходить на третьем сайте (WordPress) с http на https, и уже первые два нормально не грузятся на Android 2.3.6...
    Хотелось бы чтобы все пользователи могли нормально заходить на сайт (в крайнем случае на старых платформах как Android 2.3.6 чтобы было только предупреждение, которое можно пропустить)
    Подскажите пожалуйста, может вы знаете в чем может быть причина?

    Решил посмотреть платные сертификаты, вроде хороший этот от Comodo namecheap.com/security/ssl-certificates/comodo/positivessl.aspx ,
    может знаете, как он работает на платформе Android? Является ли сертификат Comodo достоверным. Немного запутался с этим

  • Добрый день! Подскажите пожалуйста. Как раз несколько дней пытаюсь решить вопрос с Lets encrypt сертификатом. На хостинге hosting.energy при создании сайта dommeb.com.ua подключил бесплатный Lets encrypt из Isp панели. Все было хорошо несколько дней, проходил тесты SSL ssllabs.com/ssltest/analyze.html на А+. Пробовал загрузить с мобильного на Android 2.3.6 с стандартного браузера и Maxton - появлялось только предупреждения о ненадежности сертификата , а дальше можно нажать Продолжить и сайт был доступен.

    Неделю назад заметил, что при загрузке с мобильного и тестов на редиректы (поставил в настройках домена на хостинге редиректы с http-https) происходит добавление в url :443 (название SSL порта). И сайт не доступен при загрузке (надпись ошибки).

    Написал в хостинг, решили в течении нескольких дней вопрос. Написали "Исправили конфигурации Nginx относительно редиректов, в конфиги закралась ошибка (вероятно, из-за панели управления) и было 2 редиректа."

    :443 уже не дописывался с мобильного и при тесте на редиректы.
    Но сайт по прежнему не грузился, как с появлением этих двойных редиректов :443 (ошибка на Android 2.3.6 сайт не доступен при загрузке).

    Посмотрел ssl тест, тоже А+ результат, но появилась ошибка в подпункте Handshake Simulation No SNI 2Android 2.3.7 No SNI 2 Server sent fatal alert: handshake_failure

    Погуглил по этой ошибке:
    Здесь про эту ошибку и решение пишут talk.plesk.com/threads/https-websites-not-loading-in-ie.338346/ Передал всю информацию в тех поддержку хостинга.

    Несколько дней переписывался с хостингом, говорят ничего в конфигурации настроек хостинга не меняли, используют стандартный плагин Lets Encrypt сертификата. И они не гарантируют работу SSL от LetsEncryt на устаревших платформах. Предложили выделенный IP за 1.5$ в месяц.
    Хотя несколько дней назад все работало и правок не было на обеих сайтах (все данные в браузерах очищал). А сам сайт хостинга (тоже на этом сертификате, нормально и сейчас грузится с с мобильного и даже без предупреждения)

    Сайты на виртуальном хостинге, без выделенного IP. Один сайт сделал на Opencart с Lets encrypt сертификатом, все было в порядке. Второй тестовый на WordPress - все было тоже хорошо с android 2.3.6. Собирался переходить на третьем сайте (WordPress) с http на https, и уже первые два нормально не грузятся на Android 2.3.6...
    Хотелось бы чтобы все пользователи могли нормально заходить на сайт (в крайнем случае на старых платформах как Android 2.3.6 чтобы было только предупреждение, которое можно пропустить)
    Подскажите пожалуйста, может вы знаете в чем может быть причина?

    Решил посмотреть платные сертификаты, вроде хороший этот от Comodo namecheap.com/security/ssl-certificates/comodo/positivessl.aspx ,
    может знаете, как он работает на платформе Android? Является ли сертификат Comodo достоверным. Немного запутался с этим