bitrix Let’s Encrypt +Виртуальная машина 6 автоматическая генерация ssl
Данная статья устарела, перейдите к более новому скрипту для битрикс вм 7
Как мы все знаем яндекс и гугл уже давно требуют ssl сертификаты на сайты. И даже есть сервис предназначенные для генерации сертификатов которые вполне себе валидно работают.
Уже много статей написано как пользоваться сервисом Let’s Encrypt, и множество мануалов. Я решил пойти дальше и автоматизировать процесс полностью для сайтов Битрикс на Битрикс Виртуальных машинах.
Но у битрикс ВМ нет стандартной функции подключить эти сертификаты, и каждый раз приходится это делать ручками.
Вот вам скрипт который облегчит вашу работу в этом направление.
Каждая строчка прокомментирована.
Указываете ваш домен в конфиге, запускаете, и сайт работает с сертификатом на https.
#!/bin/bash ######### тут указываем совой домен ######################################################################### DOMAIN=shop.wildorchid.ru EMAIL=vtaran@wildorchid.ru ############################################################################################################# #ставим гит, если его нет rpm -q git || yum install git && echo "А гит уже стоит и мы его пропускаем" # в этой папке и будет лежать сам дистрибутивчик cetbot, он нам нужен будет потом для обновления ключиков. cd /root #проверяем не скачан ли он уже и качаем если нет. test -d certbot && echo "Каталог уже есть, ниче не качаем" || git clone https://github.com/certbot/certbot cd certbot # Выставляем права на файл chmod a+x ./certbot-auto || echo "проблема правами на файл" && echo "Права на файл поменяли успешно" # проверяем верен ли путь до сайта, и не сгенерирован ли уже ключик, если все ок генерим! test -d /home/bitrix/ext_www/$DOMAIN || echo "/home/bitrix/ext_www/$DOMAIN -нет такой директории" && test -f /etc/letsencrypt/live/$DOMAIN/fullchain.pem && echo "А файл уже есть, не не генерируем новый !" || ./certbot-auto certonly --webroot --agree-tos --email $EMAIL -w /home/bitrix/ext_www/$DOMAIN -d $DOMAIN -d www.$DOMAIN || echo "А не угадали с каталогом, проверяем пути" && # создаем место для ключика dhparam test -d /etc/pki/nginx || mkdir /etc/pki/nginx # ставим openssl rpm -q openssl || yum install openssl && echo "openssl уже стоит, пропускаем..." echo " ЭТОТ КЛЮЧЬ ГЕНЕРИРУЕТСЯ 1 РАЗ НА ВЕСЬ СЕРВЕР И ДАЛЕЕ БУДЕТ ПРОПУСКАТЬСЯ!" echo "Откиньтесь на спинку кресла и подождите, это минимум минут на 5" 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_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 "замена в конфигах прошал без ошибок" # перед рестартом проверяем валидность конфигов, если ок рестартуем. service nginx configtest && echo "Nginx валидно завершил проверку конфигов" && service nginx restart #certbot-auto renew #проверяем нет ли записи в кроне и добавляем ее echo "Записываем Автообновление сертификатов крон" crontab -l | grep -q "\* \*/12 \* \* \* cd /root/certbot/ \&\& \./certbot-auto renew \/etc\/init.d\/nginx restart >> /dev/null 2>\&1 " && echo "А в кроне уже запись есть, ничего не добавляем" || echo "* */12 * * * cd /root/certbot/ && ./certbot-auto renew >> /dev/null 2>&1 " >> /var/spool/cron/root echo "не забывайте про редиректы которые могут вести на http!!!!!!!!"
Rаждые 12 часов будет пытаться обновиться сертификаты (если они валидные ничего не происходит).
Как они просочатся, то автоматически пере выпустятся.
Теперь у нас все работает, осталось повысить качество сертификата до А+
Обратите внимание что скрипт в первый раз будет работать очень долго, поскольку потребуется создание ключа, он генерируется 1 раз и при последующих запусках этот пункт пропускается, добавляя этот файлик уже в конфиг. Так он генерится
openssl dhparam -out /etc/pki/nginx/dhparam.pem 4096
А сюда мы его ложим
ssl_dhparam /etc/pki/nginx/dhparam.pem;
Теперь проверяем класс сертификата, и убеждаемся что у нас А +
Сервис по проверки качества сертификата
Конец
Дополнительная информация
Так же на одном из серверов вылезла ошибка пакета в следствие чего не смог установиться LetsEncrypt
Вот такая: Could not install OS dependencies. Aborting bootstrap!
Лечится достаточно легко
package-cleanup --dupes package-cleanup --cleandupes package-cleanup --problems yum update python
Генератор конфигурации для разных веб серверов, включая версионность: https://mozilla.github.io/server-side-tls/ssl-config-generator/
Оставить комментарий
Комментарии (10)