#Симптом и границы применимости
После продления сертификата браузер или openssl по-прежнему получает старую цепочку. Проверять нужно именно цепочку, которую сервер передаёт клиенту с именем сайта (SNI), а не только дату локального файла.
#Возможные причины и как их отличить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Сервер читает другой файлОбновление файла в одной папке не влияет на сертификат другого виртуального хоста. | На диске новая цепочка есть, но ssl_certificate указывает на другой путь | Сверить пути из полной конфигурации |
| Не перечитана конфигурацияРабочие процессы продолжают обслуживать соединения с ранее загруженным сертификатом. | После перезапуска/перечитывания сертификат меняется | Проверить состояние службы и безопасно перечитать конфигурацию |
| Внешний прокси или несколько адресовTLS может завершаться не на том Nginx, где меняли файл. | Разные IPv4/IPv6 или промежуточный прокси выдают разные цепочки | Проверить каждую конечную точку |
#Пошаговая диагностика и исправление
- Уточните, какой сертификат видит посетительНа своём компьютере откройте терминал (Windows — PowerShell, Linux/macOS — Терминал). Вместо example.com подставьте домен; проверьте дату и издателя первого сертификата. Для диагностики цепочки важен флаг -showcerts: если на экране только один сертификат при наличии промежуточного, цепочка может быть неполной. Команда не изменяет сервер.
- Среда: Linux/macOS или Windows с установленным OpenSSL; вводится домен, без паролейLinux · Терминал (Bash)КомандаСреда: Linux/macOS или Windows с установленным OpenSSL; вводится домен, без паролей.
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null
- Проверьте реальный файл в NginxПодключитесь к серверу по SSH с учётной записью, которой разрешён sudo. Посмотрите строки ssl_certificate, ssl_certificate_key и server_name. Если вывод содержит секреты из других частей конфигурации, не пересылайте его целиком. Запишите путь файла для нужного виртуального сервера и проверьте, что он соответствует новому полному сертификату, а не только отдельному файлу ключа.Linux · Терминал (Bash)КомандаНужен sudoТолько чтение; nginx -T выводит конфигурацию, поэтому не публикуйте её целиком.
sudo nginx -T 2>&1 | grep -nE "ssl_certificate|server_name|listen .*443"
- Проверьте состав файла и соответствие имениОткройте именно файл из ssl_certificate с помощью безопасного просмотрщика или openssl x509. Первая PEM-секция должна быть сертификатом вашего домена, затем следуют промежуточные сертификаты в порядке цепочки. Ключ держите отдельно, не отправляйте его в чат и не вставляйте в команды. Если сертификат чужого домена, не включайте его, а восстановите правильный файл из копии.Linux · Терминал (Bash)КомандаНужен sudoПуть примерный: замените его фактическим из конфигурации; команда проверяет только первый сертификат.
sudo openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -noout -subject -issuer -dates
- Проверьте, не обслуживает ли HTTPS другой узелПосмотрите в панели DNS значения A и AAAA, а в настройках CDN или балансировщика — где завершается TLS. Если есть второй сервер, сравните сертификаты с разных адресов, указывая SNI. Не меняйте DNS наугад: у CDN может быть собственный сертификат. При доступе к целевому IP используйте openssl s_client -connect IP:443 -servername example.com.
- Исправьте путь и перечитайте NginxПеред изменением конфигурации сохраните копию конкретного файла и текущий путь ssl_certificate. Через редактор с правами администратора укажите файл полной цепочки, выданной удостоверяющим центром. Запустите проверку синтаксиса. Только при успешном сообщении “syntax is ok” и “test is successful” выполните reload; если проверка не прошла, верните резервную копию и не выполняйте reload.Linux · Терминал (Bash)С осторожностьюНужен sudoСреда: SSH на Linux с systemd; требуется sudo. Перечитывание влияет на все сайты этого экземпляра.
sudo nginx -t && sudo systemctl reload nginxКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
#Как проверить результат
Повторите openssl s_client с нужным SNI через внешний интернет и, если возможно, отдельно через IPv4/IPv6. Сравните даты, издателя и количество сертификатов с новым комплектом. Откройте сайт в приватном окне: отсутствие предупреждения у одного браузера не доказывает правильность цепочки.
#Если проблема не устранена
Если старый сертификат остаётся, выясните через DNS и схему прокси, какой сервер отвечает на порт 443; проверьте, не обслуживает ли домен другой server-блок с тем же listen. При сомнениях верните прежний рабочий конфиг, а новый сертификат проверьте отдельно.