SSL-сертификат в BitrixVM: выпуск, продление и что делать при отзыве
В виртуальной машине сертификаты настраиваются через меню, в разделе управления веб-серверами пула — пункт Configure certificates. Внутри три действия: выпустить бесплатный сертификат Let's Encrypt, поставить свой и вернуть самоподписанный по умолчанию.
Под капотом выпуском занимается отдельная утилита (dehydrated), её настройки лежат в каталоге пользователя bitrix. Знать это полезно: половина сообщений об ошибках приходит именно оттуда.
Выпуск
Выберите Configure "Let's encrypt" certificate и укажите:
- имя сайта в пуле;
- все домены через запятую — обязательно и с
www, и без, иначе половина посетителей увидит предупреждение; - адрес почты для уведомлений удостоверяющего центра.
Перед выпуском домен должен указывать на этот сервер: проверка идёт по доступности сайта, и на домене, который ещё не переехал, сертификат не выпустится.
Что ломается чаще всего
Соседний сайт с несуществующим доменом
Коварный случай: на сервере несколько сайтов, у одного домен больше не существует или не делегирован. При выпуске сертификата для другого, рабочего сайта процедура падает — сертификат скачивается и обновляется, но не устанавливается. Причина в том, что утилита обходит все сайты пула разом.
Лечение: убрать из пула сайты с мёртвыми доменами или вернуть им сертификат по умолчанию, прежде чем выпускать новый соседу.
Задача «finished», а сертификата нет
В списке фоновых задач операция помечена завершённой, но на сайте по-прежнему старый сертификат. Смотреть нужно журнал самой задачи: в нём будет настоящая причина — не прошла проверка домена, не хватило прав, не доступен служебный путь.
Рабочая последовательность при таком сбое: сначала Restore default certificate, затем выпуск заново. Попытки выпускать поверх сломанного состояния обычно повторяют ту же ошибку.
Сайт перестал открываться по https
После установки сертификата браузер отдаёт ERR_SSL_PROTOCOL_ERROR, а откат к сертификату по умолчанию не помогает. Обычно это значит, что в конфигурации веб-сервера остались ссылки на файлы, которых нет, или путь к сертификату прописан не там. Проверьте конфигурацию nginx и журнал его запуска — служба может работать со старым конфигом, пока её не перезапустили.
Ошибка про «dubious ownership»
В журнале появляется сообщение вида fatal: detected dubious ownership in repository at '/home/bitrix/dehydrated'. Это не про сертификаты, а про права на каталог утилиты: он принадлежит одному пользователю, а запускается от другого. Чинится приведением владельца каталога в порядок.
Не хватило места на диске
Отдельная причина, которую не ищут: при заполненном диске сертификат не выпускается и не продлевается, а в довесок может не подняться веб-сервер. Если сертификат внезапно перестал продлеваться, проверьте свободное место первым делом.
Продление
Сертификаты Let's Encrypt действуют 90 дней. Машина проверяет их по расписанию и перевыпускает заранее — вмешиваться не нужно. Если продление не сработало, запустите выпуск для того же домена ещё раз: система проверит срок и обновит сертификат.
Частые причины, по которым автопродление ломается:
- домен перестал указывать на сервер;
- служебный путь
/.well-known/закрыт редиректом на https или правилом в конфигурации; - старая версия виртуальной машины: процедуру автопродления в своё время чинили, и на устаревших сборках она работает не всегда;
- кончилось место на диске.
Свой сертификат
Платный ставится тем же пунктом меню: нужны файл сертификата, приватный ключ и цепочка промежуточных. Без цепочки сайт откроется в браузере, но будет ругаться в мобильных приложениях и при обращениях по API — самая частая ошибка ручной установки.
Если сертификат отозван
- Выпустите новый — через меню это минуты.
- Если причина в утечке ключа, не переиспользуйте старый ключ и проверьте, откуда он мог утечь: резервные копии в открытом доступе, передача по почте, доступ подрядчиков.
- Проверьте всё, что ходит к сайту по API: обмены с 1С, мобильные приложения, интеграции.
Проверка
После любых изменений откройте сайт и посмотрите срок действия и список доменов в сертификате. Отдельно проверьте адрес с www и без, а если сайтов в пуле несколько — каждый: сертификат выпускается на сайт, а не на сервер целиком.
Частые вопросы
Задача выпуска помечена завершённой, а сертификат не установился.
Смотрите журнал самой задачи — там настоящая причина: не прошла проверка домена, не хватило прав, недоступен служебный путь. Рабочая последовательность: сначала вернуть сертификат по умолчанию, затем выпускать заново.
Выпускаю сертификат одному сайту, а падает из-за другого.
Так бывает, когда в пуле есть сайт с несуществующим или неделегированным доменом: процедура обходит все сайты разом. Уберите мёртвые домены из пула или верните им сертификат по умолчанию.
После установки сайт не открывается, ERR_SSL_PROTOCOL_ERROR.
Обычно в конфигурации веб-сервера остались ссылки на отсутствующие файлы или неверный путь к сертификату. Проверьте конфигурацию nginx и перезапустите службу — она может работать со старым конфигом.
Сертификат перестал продлеваться сам.
Проверьте по порядку: указывает ли домен на сервер, не закрыт ли путь /.well-known/ редиректом, хватает ли места на диске и не устарела ли версия виртуальной машины — процедуру автопродления в своё время чинили.
В журнале ошибка про dubious ownership.
Это права на каталог утилиты выпуска: он принадлежит одному пользователю, а запускается от другого. Приведите владельца каталога в порядок, и выпуск пойдёт.
Почему сертификат выпустился, а браузер ругается?
Чаще всего он выпущен не на все домены: нужны и адрес с www, и без него. Посмотрите список доменов в самом сертификате и выпустите заново со всем перечнем.
Нужно ли продлевать Let's Encrypt вручную?
Нет, машина проверяет сертификаты по расписанию и перевыпускает заранее. Вручную запускают выпуск, только когда автоматическое продление не сработало.