Переезд с http на https в Веб-окружении 1С-Битрикс

В последнее время очень участились запросы на настройку сайтов на https-защиту.

Для специалиста в администрировании серверов это простое дело, а вот для всех остальных, данный процесс может быть очень даже не простым. Попробую в общих чертах обрисовать процесс добавления сертификата для сайта, размещенного на виртуальной машине 1С-Битрикс (для варианта, когда сайт установлен как дополнительный для веб-окружения).

Перед началом работ по переносу сайта с http на https убедитесь, что у вас на сайте отсутствуют абсолютные ссылки. Чаще всего такое встречается в текстах, которые прописывают контент-менеджеры - они обычно тексты пишут в каком-то текстовом процессоре, а потом просто копируют в редактор. При этом ссылки все остаются с указанием протокола и домена. Тут нужно или глазами просматривать, или писать скрипт проверки - все индивидуально.

Для начала получаем сертификат. Где вы будете брать сертификат и какой лучше выбрать - это оставлю за кадром - в сети очень много информации по данному вопросу.  Для установки SSL в nginx потребуются следующие файлы: коренвой сертификат (root), сертификат посредника (intermediate) и непосредственно сам сертификат для домена.

Перейдем сразу к процессу создания сертификата. Будем считать, что вы выбрали обычный сертификат с проверкой одного домена.

Итак, вы начинаете генерацию сертификата. На первом же шаге система вам генерирует ключ (обычно он показывается в простом текстовом поле и подразумевается само собой, что вы должны его скопировать себе и сохранить). Это ваш секретный ключик, который нужно! сохранить - без него все, что дальше - бесполезно!

На основании этого, сохраненного вами ключа будет сгенерирован сертификат для вашего домена (или доменов), который, скорей всего, будет выслан вам на контактный e-mail, но, возможно, также будет и ссылка на скачивание прямо в панели.

Будем считать, что ключик у вас уже есть (самое главное, есть личный ключ, который сохраняем в виде: domain_ru.key). Нас интересуют всего 2 файла:  domain_ru.crt и domain_ru.key.

Авторизуемся в веб-окружении под root-пользователем. Создаем папку (_cur_date_domain_ - пометка с текущей датой и доменом, если на сервере несколько доменов заведено):

mkdir ~/_cur_date_domain_

В данную папку заливаем наши файлы с сертификатом.

Дальше, эти 2 файла нужно объединить в один общий (также с пометкой даты создания, чтобы потом было проще менять на новый):

cat domain_ru.key domain_ru.crt domain_ru.ca-bundle >> domain.ru_cur_date.pem

domain_ru.ca-bundle - цепочка сертификатов от сервера лицензий. Более подробно про то, какие сертификаты объединять, можно почитать тут

И копируем полученный файл в список сертификатов сервера:

cp domain.ru_cur_date.pem /etc/nginx/certs/domain.ru_cur_date.pem

Дальше открываем меню виртуальной машины и переходим в раздел управления сертификатами (Manage web nodes in the pool - Configure certificates - Configure own certificate). Вводим название сайта. Т.к. файл с сертификатом мы положили в папку /etc/nginx/certs/ то мы можем не писать полный путь, а указать лишь относительный путь от данной папки. Поэтому, при запросе сертификатов прописываем просто название нашего сгенерированного файла.

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

/etc/nginx/bx/site_avaliable/bx_ext_ssl_domain.ru.conf 

(если сайт заведен в веб-окружении как основной, править нужно файлы /etc/nginx/bx/site_avaliable/ssl.s1.conf и /etc/nginx/bx/site_avaliable/s1.conf)

В файл /etc/nginx/bx/site_avaliable/bx_ext_ssl_domain.ru.conf необходимо включить наши файлы сертификата.

Для этого комментируем строчку include bx/conf/ssl.conf; (вставляем впереди нее #) а вместо нее вставляем содержимое файла /etc/nginx/bx/conf/ssl.conf

Во вставленном коде, необходимо указать наши ssl-сертификаты:

ssl_certificate /etc/nginx/ssl/domain.ru.pem
ssl_certificate_key /etc/nginx/ssl/domain.ru.pem

Сохраняем файл и проверяем конфигурацию на отсутствие ошибок:

nginx-t

Дальше, нам нужно настроить, чтобы сайт был доступен только по https. Для этого открываем файл:

/etc/nginx/bx/site_avaliable/bx_ext_ssl_domain.ru.conf

В данном файле после блока

server_name domain.ru www.domain.ru

пишем:

if ($scheme = http) {
   return 301 https://$server_name$request_uri;
}

Еще раз проверяем конфигурацию nginx и перезагружаем nginx. Если все было сделано верно - вы получите корректно настроенный 301-й редирект с http на https с установленным для домена сертификатом.

Для проверки корректности установки сертификата вы можете воспользоваться сервисом.

Как видите, данный процесс не такой уж и сложный. Далее не забудьте изменить адрес sitemap.xml и хост в  robots.txt, а также изменить протокол для адресов в генераторе вашей карты сайта (если, конечно, ваш генератор карты не делает этого сам. К примеру, мой генератор карты сайта, построенный на основе модуля поиска определяет протокол автоматически).

Update 2017-02-02. Шпаргалка по SSL-сертификатам:

Запрос на выдачу сертификата и приватный ключ удобно генерировать в Онлайн CSR Генератор.

Основные цепочки сертификатов:

Comodo Essential SSL:

cat EssentialSSLCA_2.crt ComodoUTNSGCCA.crt UTNAddTrustSGCCA.crt AddTrustExternalCARoot.crt > yourDomain.ca-bundle

Comodo Essential SSL\PositiveSSL:

cat COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt >  yourDomain.ca-bundle

RapidSSL

cat ServerCertificate.cer CACertificate-1.cer CACertificate-2.cer > yourDomain.ca-bundle

Сервис от Qualys SSL Labs представляет очень подробную техничесткую информацию о настройке ssl на Вашем сайте.

Update 2018-07-10. Замечательное видео о выпуске сертификата:

Инструкция на сайте ssl.com.ua..

Update 2018-07-13. Как искать http://

Если ваш сайт переежает с http на https - первое, что вы должны сделать - это избавиться от всех http:// ссылок.

Процесс перехода состоит вообще из таких шагов:

  • Необходимо заменить все внутренние абсолютные ссылки на относительные. К примеру, ссылку http://you.site/catalog/section/product/ нужно заменить на /catalog/section/product/ , т.е. ссылки без указания протокола и доменного имени. Заменить нужно том числе и все ссылки на медиаконтент (изображения, документы, видео, файлы стилей, файлы js-скриптов, подключение разных внешних сервисов).
  • После переезда на https - нужно настроить 301-й редирект со старого протокола на новый, проверить, чтобы все ссылки на сайте имели корректный формат, все канонические ссылки были заменены, ссылки в карте сайта были заменеы
  • Пройтись по разным типовым страницам сайта и проверить, чтобы адресная строка подсвечивалась зеленым цветом - если это так, то вы все сделали верно.

Но как же искать эти все http? Не просматривать же вручную все элементы инфоблока? Для поиска протокола в элементах инфоблоках можно отрыть в административном разделе сайта страницу Настройки - Инструменты - SQL-запрос и тут выполнить запрос:

select `ID`, `IBLOCK_ID` from `b_iblock_element` where `DETAIL_TEXT` like '%http:%';

В результате вы получите список из ID элементов и ID инфоблоков, в которых эти элементы лежат - остается только пройтись по этим элементам и внести правки.

Для поиска http-ссылок в файлах можно воспользоваться сервером (есил вам повезло и сайт у вас хотя бы на VPS и у вас есть ssh-доступ к файлам сайта). Переходим в корневую папку сайта и запускаем поиск по всем файлам, за исключением файлов ядра:

grep -inR "http://"  --exclude-dir={bitrix,upload,1} --exclude={'*.xml','*.jpg','*.png','*.gif','*.log'} .  > search_res.log

В результате, в корне сайта появится файл search_res.log, в котором будут перечислены все файлы, в которых нужно внести правки (из анализа будут исключены папки ядра, а также файлы с изображениями и логами). После этого можно аналогичный поиск прогнать в папке с шаблоном сайта, чтобы http-ссылок не осталось в шаблонах компонентов или, что еще хуже - в header.php и footer.php

Кількість показів: 8472
23.03.2017

Повернення до списку

Если вам была полезна статья можете отблагодарить автора: