SSL на Битрикс виртуальной машине 7 с помощью Let’s Encrypt

Автоматическая генерация SSL ключей в Битрикс Bitrix virtual appliance version 7.0.1

Недавно я написал статью по этому поводу для старых битрикс ВМ на centos 6. Но время идет и centos 7 уже поддерживается ВМ битрикс. А в купе с ним и Let’s Encrypt добавлен в официальные репозитории, включая утилиту certbot Соответственно пришлось переделывать скрипт, я его облегчил до максимума.

И так имеем:
Bitrix virtual appliance version 7.0.1
PHP 7.3 - ( апнут руками с 7)

Задача:
Перевести сайт на https
Дать сайтам валидные сертификаты А класса
Автоматическая замена устаревших сертификатов.
Подключение http2 (опционально - требует полного отказа от сайта без ssl )

#!/bin/bash
######### тут указываем совой домен #########################################################################

DOMAIN=mfwo.ru
EMAIL=vtaran@wildorchid.ru

ROOT=home/bitrix/ext_www
#############################################################################################################
yum -y install yum-utils
yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
rpm -q certbot || yum install epel-release
rpm -q certbot || yum install certbot

# проверяем верен ли путь до сайта, и не генерирование ли уже ключик, если все ок генерим!
test -d /$ROOT/$DOMAIN  || echo "/$ROOT/$DOMAIN -нет такой директории"  && test -f /etc/letsencrypt/live/$DOMAIN/fullchain.pem && echo "А файл уже есть, не не генерируем новый !" || 
certbot certonly --webroot --agree-tos --email $EMAIL -w /$ROOT/$DOMAIN -d $DOMAIN -d www.$DOMAIN || echo "А не угадали с каталогом, проверяем пути" &&

# создаем место для ключика  dhparam
test -d /etc/pki/nginx || mkdir /etc/pki/nginx
test -f /etc/pki/nginx/dhparam.pem && echo "файл /etc/pki/nginx/dhparam.pem уже есть, пропускаем его" || openssl dhparam -out /etc/pki/nginx/dhparam.pem 4096  


# добавляем все в конфиг  сайта  /etc/nginx/bx/site_avaliable/bx_ext_ssl_$DOMAIN.conf
sed -i '\| include bx/conf/ssl.conf| {  s|include bx/conf/ssl.conf|#&|; a\
 ssl_stapling on;\
 ssl_certificate /etc/letsencrypt/live/'$DOMAIN'/fullchain.pem;\
 ssl_certificate_key /etc/letsencrypt/live/'$DOMAIN'/privkey.pem;\
 ssl on;\
 keepalive_timeout 70;\
 keepalive_requests 150;\
 ssl_session_cache shared:SSL:10m;\
 ssl_session_timeout 10m;\
 ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';\
 ssl_prefer_server_ciphers on;\
 ssl_dhparam /etc/pki/nginx/dhparam.pem;\
 ssl_session_cache       shared:SSL:10m;\
 ssl_protocols  TLSv1.1 TLSv1.2;\
 add_header Strict-Transport-Security "max-age=31536000;";\
  #add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: dat a:; font-src https: dat a:; report-uri /csp-report";
}' /etc/nginx/bx/site_avaliable/bx_ext_ssl_$DOMAIN.conf && echo "замена  в конфигах прошла  без ошибок"

# перед рестартом  проверяем валидность конфигов, если ок рестартуем.
nginx -t && echo "Nginx  валидно завершил проверку конфигов" && service nginx restart 

echo "Записываем Авто обновление сертификатов  крон"
crontab -l | grep -q "0 \*/12 \* \* \* certbot renew —quiet && nginx -s reload >> /dev/null 2>&1"  && echo "А в кроне уже запись есть, ничего не добавляем" || echo "0 */12 * * * certbot renew —quiet && nginx -s reload >> /dev/null 2>&1"

Теперь осталось подключить http2  Для этого вам нужно заменить в файле


/etc/nginx/bx/site_avaliable/bx_ext_ssl_ВАШСАЙТ.ru.conf 
Строку
listen 443 ssl; 
На
listen 443 ssl http2; 

service nginx restart 


Ну и на подлесок,не забывайте что https2 в работает частично и не распространится на apache2, следовательно час контента все еще будет отадватья по http1.
Проверить это легко. В хроме открыть инспектор - сеть  - и добавить колонку "Protocol"
Определить поддержку сайтом протокола HTTP/2
После этого будет видно кто и что отдает.
Поддерживает ли сайт HTTP2

Комментарии (0)


Оставить комментарий