Открыть сервисСервис

Ошибка SSL Version or Cipher Mismatch

SSL Version or Cipher Mismatch — ошибка протокола TLS/SSL, возникающая при установке защищённого соединения между клиентом и сервером, когда стороны не могут согласовать версию протокола SSL/TLS или набор шифров (cipher suite). Сообщение об ошибке указывает, что сервер отклонил попытку подключения, поскольку предложенные клиентом параметры криптографии несовместимы с поддерживаемыми сервером. Ошибка встречается в браузерах, серверном ПО (Apache, Nginx, IIS), базах данных, почтовых клиентах и API-клиентах.

Причины возникновения

Основные причины ошибки:

  • Устаревшая версия SSL/TLS. Клиент пытается использовать SSL 2.0 или SSL 3.0, которые отключены на сервере по соображениям безопасности. Аналогично сервер может требовать TLS 1.2/1.3, а клиент поддерживать только более старые версии.
  • Несовпадение наборов шифров. Клиент и сервер не имеют ни одного общего cipher suite. Например, сервер настроен только на шифры AES-GCM, а клиент поддерживает только устаревшие RC4 или 3DES.
  • Проблемы с SNI (Server Name Indication). Клиент не передаёт имя хоста при подключении, и сервер выбирает сертификат по умолчанию с другим набором шифров.
  • Прокси-серверы и файрволы. Промежуточные устройства могут выступать в роли TLS-терминатора и поддерживать другой набор протоколов, чем реальный сервер.
  • Некорректная конфигурация сервера. В конфигурационных файлах указаны несуществующие или взаимоисключающие шифры, либо жёстко ограничена версия протокола.
  • Устаревшее клиентское ПО. Старые версии OpenSSL, Java, браузеров или операционных систем не поддерживают современные алгоритмы.

Способы исправления

Проверка конфигурации сервера

Для Apache HTTP Server параметры задаются в файле ssl.conf:

`` SSLProtocol all -SSLv2 -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 соответствующие директивы в блоке server:

`` 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; ``

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

Диагностика с помощью OpenSSL

Проверить поддерживаемые версии и шифры можно командой:

`` openssl s_client -connect example.com:443 -tls1_2 ``

Полный список поддерживаемых cipher suites выводится командой:

`` openssl ciphers -v 'ALL:eNULL' ``

Для проверки конкретного шифра:

`` openssl s_client -connect example.com:443 -cipher 'AES128-SHA' ``

Обновление клиентского ПО

Если ошибка возникает на стороне клиента, рекомендуется:

  1. Обновить операционную систему и её криптографические библиотеки (в Linux — пакеты openssl, ca-certificates).
  2. Обновить браузер до актуальной версии.
  3. В старых версиях Java (7 и ранее) в файле java.security может быть жёстко ограничен список шифров — его следует расширить или обновить JRE.
  4. В Windows при использовании старых версий Internet Explorer или Outlook может потребоваться включение TLS 1.2 через оснастку «Свойства обозревателя» → «Дополнительно».

Работа с прокси и корпоративной инфраструктурой

Если подключение проходит через прокси-сервер, необходимо убедиться, что он поддерживает нужную версию TLS и не подменяет сертификат. В корпоративных сетях с TLS-инспекцией (например, на базе Squid или коммерческих решений) ошибки часто вызваны тем, что промежуточный узел не поддерживает TLS 1.3, хотя конечный сервер его требует.

Проверка SNI

Отсутствие SNI приводит к тому, что сервер выдаёт сертификат по умолчанию, который может использовать другой набор шифров. Проверить передачу SNI можно так:

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

В клиентских библиотеках (например, Python requests, Java HttpClient) SNI передаётся автоматически при использовании доменных имён; при подключении по IP-адресу его необходимо задавать вручную.

Профилактика

Для предотвращения подобных ошибок рекомендуется использовать конфигурации Mozilla SSL Configuration Generator, который формирует рекомендуемые наборы шифров для Apache, Nginx, HAProxy и других серверов по актуальным стандартам (профили Modern, Intermediate, Old). Регулярное обновление OpenSSL и системных криптографических библиотек позволяет избежать несовместимости при отключении устаревших алгоритмов на стороне серверов.

Источники

  • Документация OpenSSL (openssl.org)
  • Mozilla SSL Configuration Generator (ssl-config.mozilla.org)
  • Документация Apache HTTP Server (httpd.apache.org)
  • Документация Nginx (nginx.org)
  • RFC 5246 — The Transport Layer Security (TLS) Protocol Version 1.2
  • RFC 8446 — The Transport Layer Security (TLS) Protocol Version 1.3
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru