Добавляем SSL-Сертификат класса «А» от Comodo в BitrixVM

Bitrix_ssl

Данный порядок действий применим и к другим поставщикам SSL-сертификатов, но, будут отличаться урлы и какие-то шаги (например оплата) могут быть быть в другом порядке.

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

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

Переменные

# SSLDOMAIN - имя домена, для которого мы получаем сертификат
SSLDOMAIN=example.com
# SSLYEAR - текущий год. Сертификаты, обычно выдаются на год или несколько лет. Необходимо для Если у вас сертификат на меньший срок, рекомендую указывать в данной переменной год и месяц.
SSLYEAR=`date +'%Y'`
# SSLDIR - папка, в которой будут располагаться сертификаты. мы принимаем за эту папку /etc/nginx/ssl/example.com
SSLDIR=/etc/nginx/ssl/$SSLDOMAIN

Если у нас порвалась сессия или сменилось окружение, перед любым этапом, необходимо повторить блок выше - задать переменные

Подготовительный этап

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

mkdir -p $SSLDIR && cd $SSLDIR

Также надо подготовить доступ для себя к одному из ящиков admin@$SSLDOMAIN administrator@$SSLDOMAIN hostmaster@$SSLDOMAIN postmaster@$SSLDOMAIN webmaster@$SSLDOMAIN, для верификации домена и получения сертификата. Для поставщиков сертификатов отличных от COMODO, список верификационных адресов может отличаться, а также может отличаться методы подтверждения владения доменом.

Cгенерируем приватный ключ для домена:

openssl genrsa -des3 -out $SSLDOMAIN.key 2048

Если нужно снять пароль с приватного ключа, выполните следующую комманду:

# openssl rsa -in $SSLDOMAIN.key -out $SSLDOMAIN.key

Сгенерируем CSR-запрос, используя приватную часть ключа из файла $SSLDOMAIN.key:

openssl req -new -key $SSLDOMAIN.key -out $SSLYEAR.$SSLDOMAIN.csr

Заполняем следующие данные

Country Name (2 letter code) [XX]:RU
State or Province Name (full name) []:Saint-Petersburg
Locality Name (eg, city) [Default City]:Saint-Petersburg
Organization Name (eg, company) [Default Company Ltd]: Contoso LLC
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:$SSLDOMAIN
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Важно: заполняем всё латиницей! Я заполнил только обязательные поля.

Выведем содержимое на экран:

cat $SSLYEAR.$SSLDOMAIN.csr

Отправляем запрос на выпуск сертификата в COMODO

Выбираем на странице http://www.comodorus.ru/comodo_ssl/11 какой нам нужен сертификат, формы с персональными данными заполните самостоятельно, но только при оплате "физическим лицом" доступна оплата онлайн, в окне заполнения CSR-запроса вставляем результат команды cat «/etc/nginx/ssl/$SSLDOMAIN/$SSLYEAR.$SSLDOMAIN.csr», в качестве программного обеспечения выбираем Other.

Теперь идём в почтовый ящик на хосте $SSLDOMAIN, в который придёт письмо для подтверждения, тут никаких сложностей.

После подтверждения домена через несколько минут (или часов :-\ ) придёт письмо в ящик на $SSLDOMAIN с архивом сертификатов.

Основная часть

Любым удобным способом заливаем сгенерированные сертификаты, например, используя nano

nano $SSLYEAR.$SSLDOMAIN.crt
nano $SSLYEAR.$SSLDOMAIN.ca-bundle

можно закрузить через SFTP, SCP, перепечатать, используя vi, короче «любым удобным способом»

Загоняем один файл сертификат на домен и промежуточные сертификаты

cat $SSLYEAR.$SSLDOMAIN.crt $SSLYEAR.$SSLDOMAIN.ca-bundle> $SSLYEAR.ssl-bundle.crt

Проверяем, что сейчас конфиг 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\/ssl.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/ssl.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 $SSLDIR/$SSLYEAR.ssl-bundle.crt;
ssl_certificate_key $SSLDIR/$SSLDOMAIN.key;" > $SSLDIR/ssl.conf

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

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

nginx -t

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

service nginx restart

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