SSL в BitrixVM настраивается штатными средствами окружения: меню управления умеет выпускать бесплатные сертификаты Let's Encrypt и подключать собственные, а всю конфигурацию Nginx генерирует автоматически. Разберём оба сценария, структуру конфигов и типовые ошибки при выпуске.
Как BitrixEnv работает с сертификатами
В BitrixVM за терминацию TLS отвечает Nginx, который слушает 443 порт и проксирует запросы на Apache или напрямую на PHP-FPM. Сертификаты подключаются на уровне отдельного сайта пула, поэтому в одном окружении спокойно уживаются несколько доменов с разными сертификатами.
Управление сертификатами вынесено в меню окружения (пункт 8. Manage sites in the pool → выбор сайта → Configure certificate for the site) и в утилиту командной строки /opt/webdir/bin/bx-sites. Меню — это лишь интерактивная надстройка над этой утилитой.
- Let's Encrypt — бесплатный сертификат, выпускается автоматически через ACME-клиент (certbot) и продлевается по расписанию.
- Свой сертификат — коммерческий или самоподписанный: вы указываете файлы
.crtи.key, окружение раскладывает их и правит конфиг Nginx.
nginx.conf вручную не нужно и вредно: при следующей операции через меню окружение перегенерирует конфиги сайта и ваши правки потеряются. Работайте через bx-sites.Подготовка: домен, DNS и порты
Let's Encrypt проверяет владение доменом по протоколу HTTP-01: выдаёт токен и запрашивает его по адресу http://example.com/.well-known/acme-challenge/<token>. Поэтому до выпуска сертификата обязательно должны выполняться три условия.
- A-запись домена указывает на IP вашего сервера, и DNS уже разошёлся (проверьте
dig +short example.com). - Порт 80 открыт снаружи — на нём отвечает Nginx окружения. Если стоит внешний firewall или Cloudflare в режиме proxy, валидация не пройдёт.
- Сайт добавлен в пул и отдаётся по HTTP: домен прописан в конфиге как
server_name.
| Что проверяем | Команда |
|---|---|
| Резолвинг домена | dig +short example.com |
| Доступность по 80 | curl -I http://example.com/ |
| Открытые порты | ss -tlnp | grep nginx |
Выпуск Let's Encrypt через меню
Запустите меню командой /opt/webdir/bin/bitrix_env_menu.sh (или просто зайдите под пользователем, для которого настроен автозапуск меню). Выберите 8. Manage sites in the pool, затем нужный сайт и пункт настройки сертификата Let's Encrypt. Окружение спросит e-mail для уведомлений от УЦ и список доменов.
Через CLI ту же операцию выполняет:
/opt/webdir/bin/bx-sites -a addcert --le --site-name=example.com --email=admin@example.com
После успешной проверки certbot складывает файлы в /etc/letsencrypt/live/example.com/, а окружение создаёт SSL-конфиг Nginx для сайта и перечитывает конфигурацию (nginx -s reload). Проверьте результат:
curl -Iv https://example.com/ 2>&1 | grep -i 'issuer\|HTTP'— цепочка и код ответа;- любой внешний SSL-чекер — чтобы убедиться, что отдаётся полная цепочка (fullchain), а не только листовой сертификат.
Установка собственного сертификата
Для коммерческого сертификата (например, от Sectigo или GlobalSign) вам понадобятся три вещи: приватный ключ, сам сертификат и цепочка промежуточных УЦ. Правильнее всего собрать fullchain — сертификат сайта плюс промежуточные, идущие следом:
cat example.crt intermediate.crt > fullchain.crt
Далее подключите пару файлов к сайту через утилиту:
/opt/webdir/bin/bx-sites -a addcert --site-name=example.com --cert=/root/fullchain.crt --key=/root/example.key
Окружение скопирует файлы в служебный каталог, выставит права 600 на ключ и пропишет директивы ssl_certificate и ssl_certificate_key в конфиг сайта. Типичные ошибки при ручной подготовке файлов:
- Забыли промежуточные сертификаты — браузеры десктопа простят, мобильные и API-клиенты выдадут ошибку доверия.
- Ключ с паролем — Nginx не запустится; снимите пароль:
openssl rsa -in enc.key -out example.key. - Ключ не от этого сертификата — сверьте модули:
openssl x509 -noout -modulus -in example.crt | openssl md5и то же для ключа, хэши должны совпасть.
Конфиги Nginx и редирект на HTTPS
BitrixEnv хранит конфигурацию Nginx модульно. Ключевые пути:
| Путь | Назначение |
|---|---|
/etc/nginx/bx/site_avaliable/ | сгенерированные конфиги сайтов (в т.ч. bx_ext_ssl_*.conf) |
/etc/nginx/bx/settings/ | общие настройки, включая параметры SSL |
/etc/nginx/bx/conf/ | подключаемые блоки локаций Bitrix |
Общие TLS-параметры (протоколы, шифры, сессии) вынесены в отдельный файл настроек и подключаются во все сайты. Рекомендуемый безопасный набор — отключить устаревшие протоколы:
ssl_protocols TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers on;
Принудительный редирект с HTTP на HTTPS в BitrixEnv включается на уровне сайта (в меню — соответствующий флаг, либо добавляется блок return 301 https://$host$request_uri; в HTTP-server). После включения HTTPS не забудьте:
- задать в настройках главного модуля Bitrix путь к сайту через
https://, чтобы не было смешанного контента; - перегенерировать композитный кеш и проверить push-сервер (он тоже должен ходить по защищённому соединению);
- прогнать сайт на mixed content — абсолютные ссылки
http://в шаблоне ломают замок.
Автопродление и диагностика
Для Let's Encrypt certbot ставит задачу продления (systemd-таймер certbot-renew.timer или запись cron). Продление срабатывает, когда до истечения остаётся меньше 30 дней. Проверить и прогнать вручную (без реального перевыпуска):
certbot renew --dry-run
После успешного продления Nginx нужно перечитать конфигурацию — это делается deploy-hook'ом. Если сертификаты подключены через bx-sites, окружение само настраивает reload; проверьте, что после --dry-run нет ошибок.
Диагностика частых проблем:
- «Замок» не зелёный / NET::ERR_CERT — почти всегда неполная цепочка. Смотрите вывод
openssl s_client -connect example.com:443 -servername example.com. - Ошибка выпуска challenge failed — токен недоступен по 80 порту: проверьте firewall и что домен резолвится на этот сервер.
- Rate limit от Let's Encrypt — не перевыпускайте циклически; лимит на дубли — 5 сертификатов в неделю на набор доменов.
Итог
В BitrixVM HTTPS — это операция на уровне сайта пула, а не ручная правка Nginx. Для большинства проектов достаточно бесплатного Let's Encrypt через меню: нужен только корректный DNS и открытый 80 порт. Коммерческий или wildcard-сертификат подключается через bx-sites -a addcert с обязательной полной цепочкой. Автопродление снимает головную боль с 90-дневным сроком, а безопасные TLS-параметры задаются один раз в общих настройках окружения.
Если инфраструктура сложнее одного сервера — кластер, балансировщик, отдельная терминация TLS или строгие требования по безопасности и HSTS — мы помогаем выстроить и сопровождать её в рамках DevOps-практик и технической поддержки: настраиваем окружение, сертификаты, мониторинг доступности и регламент продления, чтобы HTTPS не отваливался в самый неподходящий момент.
Частые вопросы
Можно ли выпустить Let's Encrypt, если сайт закрыт паролем на 80 порту?
Нет. Валидация HTTP-01 требует, чтобы токен по пути /.well-known/acme-challenge/ был доступен снаружи без авторизации. Временно откройте доступ или используйте DNS-01 для собственного сертификата.
Почему браузер на телефоне ругается на сертификат, а на компьютере всё нормально?
Почти всегда это неполная цепочка сертификатов. Десктопные браузеры умеют подтягивать промежуточные УЦ, мобильные — нет. Соберите fullchain из сертификата сайта и промежуточных и переустановите.
Как настроить редирект всех запросов с http на https?
В меню окружения при настройке сертификата есть опция принудительного HTTPS. Она добавляет в HTTP-server блок return 301 на https-версию адреса. Дополнительно пропишите https в настройках главного модуля Bitrix.
Куда BitrixEnv кладёт файлы сертификата Let's Encrypt?
Сам certbot хранит их в /etc/letsencrypt/live/<домен>/, а окружение ссылается на них из сгенерированного конфига Nginx в каталоге /etc/nginx/bx/site_avaliable/.
Нужно ли что-то делать после автопродления сертификата?
В штатной схеме нет: продление отрабатывает по таймеру, а Nginx перечитывает конфигурацию через deploy-hook. Стоит лишь периодически прогонять certbot renew --dry-run, чтобы убедиться, что процесс исправен.
Поддерживает ли меню BitrixVM wildcard-сертификаты?
Штатный выпуск через меню использует HTTP-01 и работает с конкретными доменами. Wildcard требует DNS-01 challenge, поэтому его обычно выпускают отдельно и подключают в окружение как собственный сертификат командой bx-sites -a addcert.
После включения HTTPS появился смешанный контент, что делать?
Проверьте шаблон и настройки на абсолютные ссылки http://. В настройках главного модуля задайте адрес сайта через https, пересоберите композитный кеш и убедитесь, что push-сервер работает по защищённому соединению.
Поможем с настройкой и поддержкой Для разработчиков
Поможем с настройкой, доработкой и поддержкой Для разработчиков.