Перейти к содержимому

SSL-сертификат в BitrixVM - выпуск, продление, перенос

Выпускаем сертификат средствами окружения, включаем переход на защищённое соединение и проверяем результат с сервера.

Решение

Проверяем, что домен указывает на этот сервер:

Окно терминала
dig +short example.com # адрес домена по данным DNS
curl -s ifconfig.me # внешний адрес самого сервера
# адреса должны совпасть: иначе проверка владения доменом не пройдёт

Выпуск бесплатного сертификата требует, чтобы домен уже вёл на сервер. Пока адреса расходятся, проверка владения не проходит, и меню возвращает ошибку без подробностей.

Выпускаем сертификат пунктом меню окружения:

Окно терминала
/opt/webdir/bin/bx-sites -a certificate -s example.com --le
# сертификат выпускается на все домены сайта, включая псевдонимы
systemctl reload nginx

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

Ставим платный сертификат:

ssl_certificate /etc/nginx/certs/example.com.crt; # сертификат + цепочка
ssl_certificate_key /etc/nginx/certs/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;

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

Включаем переход на защищённое соединение:

# переадресация на уровне веб-сервера: до PHP запрос не доходит вовсе
if ($scheme = http) {
return 301 https://$host$request_uri;
}

Переадресацию в коде сайта делать не нужно. Она обходится дороже, попадает в кэш вместе со страницей и ломается на служебных адресах обмена.

Проверяем результат с самого сервера:

Окно терминала
# цепочка, срок действия и издатель одной командой
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -dates -issuer -subject

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

Смешанное содержимое ищут по исходному коду готовой страницы. Ссылки на картинки и скрипты с незащищённым адресом остаются в шаблоне сайта и в сохранённых текстах инфоблоков, и правят их именно там, а не в настройках сервера.

Адрес сайта в настройках продукта меняют сразу после установки сертификата. Пока в настройках сайта остаётся незащищённый адрес, ссылки в письмах и в служебных переадресациях собираются по нему, и посетитель попадает на старый адрес.

Типичные проблемы

Выпуск сертификата не проходит без объяснений.

Домен не указывает на этот сервер. Проверка владения обращается к домену снаружи и не находит там нужный ответ.

В браузере компьютера всё в порядке, на телефоне ошибка.

В файле сертификата нет промежуточной цепочки. Настольный браузер достраивает её сам, мобильный клиент считает сертификат недоверенным.

Сертификат не продлился и истёк.

Он выпущен мимо меню окружения. Задание на продление создаёт команда выпуска, и для чужого сертификата его нет.

Страница открывается по https, но замок перечёркнут.

Часть картинок и скриптов грузится по незащищённому адресу. Смешанное содержимое браузер помечает даже при исправном сертификате.

После включения переадресации сломался обмен с 1С.

Переадресация применена ко всем адресам сразу. Служебные адреса обмена исключают из правила либо настраивают источник на защищённый адрес.

Частые вопросы

Бесплатного сертификата достаточно для магазина?

Да, шифрование у него такое же, как у платного. Платные отличаются страховкой и проверкой организации, а не стойкостью соединения.

Как перенести сертификат на другой сервер?

Копируют файл сертификата и закрытый ключ, затем прописывают пути в конфигурации нового сервера. Бесплатный проще выпустить заново: перенос не даёт выигрыша.

Можно ли повесить несколько сертификатов на один сайт?

На один домен - один сертификат. Несколько доменов на сервере получают каждый свой, и веб-сервер выбирает нужный по имени из запроса.

Почему после установки сайт открывается по старому адресу?

В настройках сайта в админке остался незащищённый адрес. Ссылки в письмах и служебные переадресации собираются по нему, а не по адресу из строки браузера.

Смежное

Первоисточник