SSL на Битрикс виртуальной машине 7 с помощью Let’s Encrypt
Автоматическая генерация SSL ключей в Битрикс Bitrix virtual appliance version 7.0.1
И так имеем:
Bitrix virtual appliance version 7.0.1
PHP 7.1.6 - ( апнут руками с 7)
Nginx - не ниже 1.10.1 (для http2)
Задача:
Перевести сайт на 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 "Записываем Авто обновление сертификатов крон, проверка за 30 дней до окончания" 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" >> /var/spool/cron/root
Теперь осталось подключить 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"
Если у вас возникли проблемы с генерацией сертификата то можно запустить ее в ручную и посмотреть что именно не устроило letsencrypt для этого можно сэмитировать генерацию сертификата, при этом попытка не будет засчитана за реальную а значит, количество этих попыток в день не умен7ьшится.
certbot certonly --dry-run --webroot -w /var/www/letsencrypt -d example.com -d www.example.comДля Ispconfig3
certbot certonly --dry-run --webroot -w /usr/local/ispconfig/interface/acme/ -d ecodream.ru
Оставить комментарий
Комментарии (18)
Оставить комментарий