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

Сертификат не обновился - разбор причин отказа

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

С чего начать

Смотрим, что отдаёт сервер прямо сейчас:

Окно терминала
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -dates -subject -issuer
# -servername обязателен: без него сервер отдаст сертификат сайта по умолчанию
curl -sI https://example.com | head -n 1 # первая строка ответа самого сайта

Три строки ответа делят причины пополам сразу. Истёкшая дата уводит к заданию на продление, чужое имя в поле subject - к составу самого сертификата.

Сверяем имена, на которые выпущен сертификат:

Окно терминала
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -ext subjectAltName # все имена сайта, включая www
echo | openssl s_client -connect example.com:443 -showcerts 2>/dev/null \
| grep -c 'BEGIN CERTIFICATE' # один сертификат означает обрыв цепочки

Имя из адресной строки обязано присутствовать в этом списке целиком. Домен с префиксом www и домен без него браузер считает двумя разными именами.

Сравниваем файл на диске с ответом веб-сервера:

Окно терминала
nginx -T | grep -n 'server_name\|ssl_certificate' # какие файлы читает сервер
openssl x509 -noout -dates -in /path/to/fullchain.pem # срок внутри самого файла
ls -l --time-style=long-iso /path/to/fullchain.pem # дата последнего продления

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

Ищем само задание на продление:

Окно терминала
grep -rn 'dehydrated\|certbot' /etc/cron.d/ /etc/crontab # задание в расписании сервера
systemctl list-timers | grep -i cert # таймер системы вместо задания

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

Читаем журнал последнего продления:

Окно терминала
tail -n 40 /home/bitrix/dehydrated_update.log # журнал обрывается на неудачном шаге
grep -n 'invalid\|unauthorized' /home/bitrix/dehydrated_update.log

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

Причины

  1. Задание на автопродление не выполняется примерно 30% случаев

    ПризнакСрок сертификата истёк ровно через девяносто дней после ручного выпуска.

    ПроверкаИщем строку задания в расписании сервера и смотрим дату последней записи журнала продления.

    Что делатьПеревыпускаем сертификат пунктом меню окружения: задание на продление создаёт именно оно.

  2. Проверка владения доменом не проходит примерно 25% случаев

    ПризнакЖурнал обрывается сообщением о недействительной проверке или об отказе в правах.

    ПроверкаКладём файл в служебный каталог проверки и открываем его снаружи по незащищённому адресу.

    Что делатьИсключаем служебный путь из переадресации и правил блокировки, затем повторяем выпуск.

  3. Домен указывает не на этот сервер примерно 15% случаев

    ПризнакПроверка уходит на чужой адрес, чаще всего по забытой записи адреса шестой версии.

    ПроверкаСмотрим записи домена обеих версий протокола и сверяем их с внешним адресом сервера.

    Что делатьУбираем неверную запись у домена либо правим её на действующий адрес сервера.

  4. Сертификат выпущен на другое имя сайта примерно 12% случаев

    ПризнакБраузер сообщает, что сертификат выдан для другого сайта, хотя срок его не вышел.

    ПроверкаСверяем список имён сертификата с доменом из адресной строки и с псевдонимами сайта.

    Что делатьПеревыпускаем сертификат сразу на все имена сайта, включая домен с префиксом www.

  5. После продления службы не перечитали файлы примерно 10% случаев

    ПризнакФайл на диске свежий, а снаружи сайт по-прежнему отдаёт истёкший сертификат.

    ПроверкаСравниваем срок в файле конфигурации со сроком, который сервер отдаёт по сети.

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

  6. В пуле сертификат заведён только у одного сайта примерно 8% случаев

    ПризнакСоседний сайт сервера открывается с сертификатом первого домена пула.

    ПроверкаСмотрим состав пула и сверяем блоки веб-сервера: у каждого домена свои пути к файлам.

    Что делатьВыпускаем сертификат каждому сайту пула отдельно, через меню и от имени этого сайта.

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

Не обновляется сертификат в BitrixVM, куда смотреть первым делом?

В журнал продления на сервере. Он показывает шаг, на котором продление остановилось, и это либо проверка владения доменом, либо отсутствие самого задания.

Обновил сертификат сторонним клиентом, а сайт всё равно не защищён.

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

Почему при продлении пишет, что проверка недействительна?

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

Сертификат продлился, а веб-сервер отдаёт старый. Что делать?

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

После замены сертификата встал обмен с 1С, связано ли это?

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

Смежное

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