Certbot: выпуск сертификата Let's Encrypt через webroot в BitrixVM
Команда certbot certonly --webroot для BitrixVM на CentOS. Путь к сайту в /home/bitrix/ext_www/. По документации Certbot (webroot plugin).
Как использовать
- Узнай имя домена: ls /home/bitrix/ext_www/
- Подставь свой домен вместо example.com в -w и -d.
- После успеха сертификаты лежат в /etc/letsencrypt/live/ДОМЕН/
Чтобы выдать сайту на BitrixVM бесплатный SSL от Let’s Encrypt, нужен выпуск сертификата без остановки веб-сервера. Метод webroot позволяет Certbot положить HTTP-01 challenge в каталог документа сайта, а Nginx отдаёт его по URL /.well-known/acme-challenge/. Проблема возникает, когда путь к документу указан неверно или каталог для challenge недоступен по HTTP: выпуск падает с ошибкой проверки домена. Симптомы: «Failed to connect to … for TLS-SNI-01» или «Unable to find a virtual host». Ниже — установка certbot на CentOS/RHEL, команда выпуска для BitrixVM (путь /home/bitrix/ext_www/ДОМЕН/public_html), проверка доступности challenge и типичные сбои.
Решение
По Certbot User Guide — webroot плагин webroot записывает challenge в указанную папку. В BitrixVM документ сайта лежит в /home/bitrix/ext_www/ДОМЕН/public_html. Этот путь передаётся в -w.
Установка certbot (CentOS/RHEL)
yum install certbot -y
which certbot
Выпуск сертификата для одного домена с www
Замените example.com на свой домен. Флаг --non-interactive обязателен для скриптов и cron; для первого запуска можно опустить и ввести email по запросу.
certbot certonly \
--webroot \
-w /home/bitrix/ext_www/example.com/public_html \
-d example.com \
-d www.example.com \
--email admin@example.com \
--agree-tos \
--non-interactive
При успехе в выводе будет строка вида «Successfully received certificate». Сертификаты появятся в каталоге:
ls -la /etc/letsencrypt/live/example.com/
# fullchain.pem — цепочка сертификатов
# privkey.pem — закрытый ключ
Проверка
- Доступность каталога для ACME challenge — если выпуск падает с ошибкой проверки домена, убедитесь, что по HTTP отдаётся путь
/.well-known/acme-challenge/:
mkdir -p /home/bitrix/ext_www/example.com/public_html/.well-known/acme-challenge
echo test > /home/bitrix/ext_www/example.com/public_html/.well-known/acme-challenge/test.txt
chown -R bitrix:bitrix /home/bitrix/ext_www/example.com/public_html/.well-known
curl -s http://example.com/.well-known/acme-challenge/test.txt
# Должен вернуться текст: test
Если ответ пустой или 404 — проверьте путь -w и конфигурацию nginx для этого сайта (location для /.well-known/).
- Проверка наличия сертификата после успешного выпуска:
sudo certbot certificates
В списке должен быть домен example.com с путями к fullchain.pem и privkey.pem. Дополнительно можно проверить срок действия: Проверка дат ACME-сертификата.
- Диагностика: какой путь к сайту в BitrixVM:
ls -la /home/bitrix/ext_www/
Имя каталога обычно совпадает с доменом сайта. В -w указывайте полный путь до public_html.
Типичные ошибки
- Ошибка «Failed to connect» или «Unable to find a virtual host» — путь в
-wне совпадает с document root сайта в nginx. Проверьте конфиг виртуального хоста (директиваroot) и сравните с путём в-w. В BitrixVM это обычно/home/bitrix/ext_www/ДОМЕН/public_html. - 403 Forbidden при запросе к /.well-known/acme-challenge/ — nginx не отдаёт этот каталог или запрещает доступ. Добавьте location для
/.well-known/acme-challenge/сaliasна нужную папку или убедитесь, что в общемrootесть подкаталог.well-knownи права доступа (chown bitrix:bitrix). - Сертификат выпущен, но сайт не переведён на HTTPS — после выпуска нужно настроить nginx на использование сертификатов и при необходимости редирект с HTTP. См. Nginx и SSL Let’s Encrypt для BitrixVM.
Где применять
- BitrixVM (prod/dev): CentOS/RHEL, стандартная структура
/home/bitrix/ext_www/. Подходит для первого выпуска и для обновления по cron с deploy hook. - Не BitrixVM: замените
-wна реальный document root вашего сайта.
Связанные сниппеты: Certbot: обновление по cron и deploy hook, Проверка дат ACME-сертификата, Nginx и SSL Let’s Encrypt для BitrixVM.
Источники: Certbot — Using the webroot plugin, Let’s Encrypt — HTTP-01 challenge.