Исправление ошибок SSL/TLS сертификата: причины и пошаговое решение | AdminWiki

Исправление ошибок SSL/TLS сертификата: причины и пошаговое решение

08 сентября 2026 6 мин. чтения
Содержание статьи

Введение: как быстро диагностировать ошибку SSL/TLS

Ошибка SSL/TLS блокирует доступ к сайту, почте или API. Браузер показывает предупреждение, клиент не подключается, запросы падают. В большинстве случаев проблему можно решить за 10 минут, если знать причину. В этой статье разбираем типовые причины ошибок SSL/TLS и даем пошаговые инструкции для их устранения на стороне клиента и сервера.

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

Ссылки на разделы для быстрого перехода:

Основные причины ошибок SSL/TLS и их признаки

Ошибки SSL/TLS возникают по четырем основным причинам: истекший срок действия сертификата, недоверие к центру сертификации (CA), несоответствие имени домена, проблемы с цепочкой доверия. Каждая причина имеет характерное сообщение в браузере и метод проверки.

Истекший срок действия сертификата

Браузер показывает NET::ERR_CERT_DATE_INVALID (Chrome) или SEC_ERROR_EXPIRED_CERTIFICATE (Firefox). Причина: сертификат не продлен вовремя, автоматическое обновление не настроено или не сработало.

Проверка даты истечения:

openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates

Вывод покажет notBefore и notAfter. Если текущая дата выходит за пределы, сертификат недействителен. Для быстрой проверки в браузере нажмите на значок замка и посмотрите срок действия.

Недоверие к центру сертификации (CA)

Сообщение NET::ERR_CERT_AUTHORITY_INVALID означает, что браузер не доверяет издателю сертификата. Причины: самоподписанный сертификат, корпоративный CA не добавлен в доверенные, отсутствуют промежуточные сертификаты.

Проверка цепочки доверия:

openssl s_client -connect example.com:443 -servername example.com -showcerts

В выводе должны присутствовать все сертификаты цепочки, включая корневой (если он передан). Если цепочка неполная, клиент не может проверить подпись.

Несоответствие имени домена в сертификате

Ошибка NET::ERR_CERT_COMMON_NAME_INVALID возникает, когда сертификат выпущен на другой домен или в нем отсутствует нужный SAN (Subject Alternative Name). Например, сертификат для example.com, а пользователь заходит на www.example.com.

Проверка SAN:

openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -ext subjectAltName

Убедитесь, что запрошенный домен есть в списке SAN. Для поддоменов нужен wildcard-сертификат (*.example.com) или отдельный сертификат.

Проблемы с цепочкой доверия

Ошибка Unable to verify the first certificate или Certificate chain is incomplete указывает на отсутствие промежуточных сертификатов на сервере. Клиент получает только конечный сертификат и не может построить цепочку до доверенного корня.

Проверка цепочки:

openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | grep -E "Verify return code|depth"

Если Verify return code: 21 (unable to verify the first certificate), сервер не передает промежуточные сертификаты. Исправьте конфигурацию веб-сервера, объединив конечный и промежуточные сертификаты в один файл.

Пошаговое исправление ошибок SSL/TLS в браузере

Если ошибка возникает только у вас, начните с проверки клиентской стороны. Выполните шаги по порядку.

Проверка системного времени и даты

Неверное системное время приводит к ошибкам валидации срока действия сертификата. Браузер считает, что сертификат еще не действителен или уже истек.

Проверьте и исправьте время:

  • Windows: Параметры > Время и язык > Дата и время. Включите автоматическую установку времени.
  • Linux: timedatectl для проверки, sudo ntpdate pool.ntp.org для синхронизации.
  • macOS: Системные настройки > Основные > Дата и время. Включите автоматическую установку.

Очистка кэша SSL и состояния браузера

Кэшированные сертификаты могут конфликтовать с новыми. Очистите SSL state:

  • Chrome: Настройки > Конфиденциальность и безопасность > Безопасность > Управление сертификатами > Очистить состояние SSL.
  • Firefox: Настройки > Приватность и защита > Сертификаты > Очистить состояние SSL.
  • Safari: Настройки > Конфиденциальность > Управление данными сайтов > Удалить все.

Проверка антивируса и брандмауэра

Некоторые антивирусы подменяют сертификаты для сканирования HTTPS-трафика. Это вызывает ошибки недоверия. Временно отключите проверку HTTPS в антивирусе (Avast, Kaspersky) или добавьте сайт в исключения. Если ошибка исчезла, настройте исключение постоянно.

Если после этих шагов ошибка сохраняется, проблема на сервере. Переходите к следующему разделу.

Исправление ошибок SSL/TLS на стороне сервера

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

Обновление истекшего сертификата

Для Let's Encrypt используйте certbot:

sudo certbot renew --dry-run

Если проверка успешна, выполните обновление без dry-run и перезагрузите веб-сервер:

sudo certbot renew
sudo systemctl reload nginx

Для коммерческих сертификатов сгенерируйте новый CSR, закажите сертификат у CA, получите файлы и установите их на сервер. Пример для Nginx:

ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;

Для Apache:

SSLCertificateFile /etc/apache2/ssl/example.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example.com.key

Настройка цепочки доверия (промежуточные сертификаты)

Получите промежуточные сертификаты от CA и объедините их с конечным сертификатом в один файл. Порядок: конечный сертификат, затем промежуточные, затем корневой (если требуется).

Пример для Nginx:

ssl_certificate /etc/nginx/ssl/example.com.chained.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;

Для Apache используйте SSLCertificateChainFile (в новых версиях можно включить цепочку в основной файл):

SSLCertificateFile /etc/apache2/ssl/example.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example.com.key
SSLCertificateChainFile /etc/apache2/ssl/example.com.chain.crt

После изменения конфигурации проверьте синтаксис и перезагрузите сервер.

Исправление несоответствия имени домена

Проверьте SAN текущего сертификата. Если нужного домена нет, перевыпустите сертификат с правильными SAN. Для Let's Encrypt:

sudo certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com

Альтернатива: настройте 301 редирект с www на без www или наоборот, чтобы пользователи всегда попадали на домен, указанный в сертификате.

Настройка SSL/TLS в Nginx и Apache

Используйте современные протоколы и надежные шифры. Пример для Nginx:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;

Для Apache:

SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder on

После изменений проверьте конфигурацию: nginx -t или apachectl configtest.

Диагностика SSL/TLS с помощью командной строки

Команды openssl позволяют быстро проверить сертификат и выявить проблему.

Проверка срока действия и деталей сертификата

Получение информации о сертификате:

openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates -issuer -subject -ext subjectAltName

Вывод покажет даты, издателя, тему и альтернативные имена.

Проверка цепочки доверия

Просмотр всех сертификатов, передаваемых сервером:

openssl s_client -connect example.com:443 -servername example.com -showcerts

Убедитесь, что в выводе есть все промежуточные сертификаты. Проверка кода возврата:

openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | grep "Verify return code"

Код 0 (ok) означает успешную проверку.

Тестирование с помощью SSL Labs

Используйте онлайн-сервис SSL Labs для комплексного анализа конфигурации. Он выявляет проблемы с цепочкой, протоколами, шифрами и дает рекомендации.

Устранение ошибок SSL/TLS в почтовых клиентах и API-запросах

Ошибки SSL/TLS возникают не только в браузерах, но и в почтовых клиентах и при вызове API.

Настройка SSL/TLS в почтовых клиентах

Для IMAP и SMTP используйте правильные порты и типы шифрования:

  • IMAP SSL/TLS: порт 993
  • POP3 SSL/TLS: порт 995
  • SMTP SSL/TLS: порт 465
  • SMTP STARTTLS: порт 587

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

Решение проблем SSL в API-запросах (curl, библиотеки)

Типичная ошибка curl: SSL certificate problem: unable to get local issuer certificate. Причина: отсутствие корневого сертификата в системе или в CA-бандле.

Решение: укажите путь к CA-бандлу:

curl --cacert /path/to/ca-bundle.crt https://api.example.com

Или обновите корневые сертификаты системы. Не рекомендуется отключать проверку сертификата (-k), это снижает безопасность.

Предотвращение повторных ошибок SSL/TLS

Автоматизация и мониторинг помогут избежать повторения проблем.

Автоматизация обновления сертификатов Let's Encrypt

Настройте cron для автоматического обновления:

0 3 * * * /usr/bin/certbot renew --quiet --renew-hook "systemctl reload nginx"

Проверьте, что обновление работает, выполнив certbot renew --dry-run.

Мониторинг срока действия сертификатов

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

#!/bin/bash
DOMAIN="example.com"
EXPIRY=$(echo | openssl s_client -connect $DOMAIN:443 -servername $DOMAIN 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
DAYS_LEFT=$(( ($(date -d "$EXPIRY" +%s) - $(date +%s)) / 86400 ))
if [ $DAYS_LEFT -lt 30 ]; then
  echo "Сертификат $DOMAIN истекает через $DAYS_LEFT дней" | mail -s "SSL Expiry Warning" admin@example.com
fi

Интегрируйте проверку в системы мониторинга (Zabbix, Nagios) или используйте внешние сервисы для оповещений.

Заключение: чек-лист быстрой проверки SSL/TLS

При возникновении ошибки SSL/TLS выполните следующие шаги:

  1. Проверьте системное время на клиенте.
  2. Очистите кэш SSL в браузере.
  3. Проверьте срок действия сертификата: openssl s_client ... | openssl x509 -noout -dates.
  4. Проверьте цепочку доверия: openssl s_client ... -showcerts.
  5. Проверьте SAN: openssl s_client ... | openssl x509 -noout -ext subjectAltName.
  6. Если сертификат истек, обновите его (certbot или вручную).
  7. Настройте автоматическое обновление и мониторинг.

Регулярная проверка и автоматизация предотвращают большинство ошибок SSL/TLS. Используйте инструменты диагностики и следуйте рекомендациям для поддержания безопасности.

Поделиться:
Сохранить гайд? В закладки браузера