bitrix Let’s Encrypt +Виртуальная машина автоматическая генерация ssl


Как мы все знаем яндекс и гугл уже давно требуют 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 >> /dev/null 2>\&1 "  && echo "А в кроне уже запись есть, ничего не добавляем" || echo "* */12 * * *   cd /root/certbot/ && ./certbot-auto renew >> /dev/null 2>&1 "  >> /var/spool/cron/root  

echo "не забывайте про редиректы которые могут вести на http!!!!!!!!"

каждые 12 часов будет пытаться обновиться сертификаты (если они валидные ничего не происходит).

Как они просочатся, то автоматически пере выпустятся.


Теперь у нас все работает!

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

openssl dhparam -out /etc/pki/nginx/dhparam.pem 4096 

А сюда мы его ложим

ssl_dhparam /etc/pki/nginx/dhparam.pem; 

Теперь проверяем класс сертификата, и убеждаемся что у нас А +

https://www.ssllabs.com/ssltest/analyze.html?d=www.mfwo.ru

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

  1. Сергей 24.04.2017 Ответить
    Здравствуйте подскажите пожалуйста ... а если несколько сайтов ... как прописывать -

    ######### тут указываем совой домен #########################################################################

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

    #############################################################################################################

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