Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Nginx Error: SSL_do_handshake() failed (SSL: error:0A0000C1:SSL routines::no shared cipher) Linux / DevOps

Nginx: SSL_do_handshake() failed (no shared cipher) — Решение

Обновлено: 18.08.2026  ·  Официальная база знаний

Клиенты (браузеры, мобильные устройства или интеграционные боты) не могут установить безопасное HTTPS-соединение с сайтом, получая ошибку ERR_SSL_VERSION_OR_CIPHER_MISMATCH. В журнале error.log Nginx фиксируется отказ криптографического согласования: SSL_do_handshake() failed (SSL: error:0A0000C1:SSL routines::no shared cipher) while SSL handshaking, client: ..., server: ....

Причина сбояНастройки сервераВозможности клиента
Устаревший клиентВключены строго TLSv1.2 TLSv1.3 и стойкие шифрыКлиент поддерживает только устаревшие SSLv3/TLSv1.0 (старый Android, Windows XP)
ECDSA / RSA конфликтУстановлен ECDSA-сертификат, но в ssl_ciphers прописаны только RSA-шифрыСервер не может подобрать совместимый алгоритм под ключ
Слишком жесткий Cipher SuiteОтключены стандартные наборы AES-GCM / CHACHA20Нет ни одного общего шифра для согласования
  • Пользователи устаревших устройств или Java-приложений со старыми версиями JDK не могут открыть сайт.
  • Nginx мгновенно разрывает сессию во время фазы Server Hello.
  1. Откройте конфигурационный файл с настройками SSL (например, /etc/nginx/snippets/ssl-params.conf или виртуальный хост).
  2. Установите современный, безопасный и широко совместимый набор протоколов и шифров по стандарту Mozilla Intermediate:
    # Разрешенные версии протоколов TLS:
    ssl_protocols TLSv1.2 TLSv1.3;
    
    # Универсальный набор шифров, совместимый с ECDSA и RSA сертификатами:
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    
    # Отдавать предпочтение серверным шифрам (для TLSv1.2):
    ssl_prefer_server_ciphers off;
  3. Убедитесь, что тип сертификата соответствует шифрам: если у вас ECC-сертификат (Elliptic Curve), в ssl_ciphers обязательно должны присутствовать шифры ECDHE-ECDSA-*.
  4. Настройте поддержку сессионных тикетов и кэша для ускорения рукопожатия:
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;
  5. Проверьте валидность параметров и примените конфигурацию: sudo nginx -t && sudo systemctl reload nginx.
Стандарт безопасности Mozilla: Регулярно сверяйте конфигурацию TLS с официальным конфигуратором Mozilla SSL Configuration Generator для поддержания рейтинга безопасности A+ в тестах Qualys SSL Labs.
Практический опыт инженера: Если вы перешли на Certbot с ключами `--key-type ecdsa` (дефолт в свежих версиях), старые конфиги Nginx с захардкоженными `AES256-SHA` (чистый RSA) гарантированно упадут с ошибкой `no shared cipher`.

Частые вопросы (FAQ)

Что означает ошибка no shared cipher?

Эта ошибка указывает на то, что во время TLS Handshake список алгоритмов шифрования, предложенный клиентом в Client Hello, не содержит ни одного совпадения со списком ssl_ciphers, разрешенным на сервере Nginx.

Безопасно ли включать TLSv1.0 и TLSv1.1 для старых клиентов?

Категорически не рекомендуется. Протоколы TLS 1.0 и 1.1 признаны небезопасными (уязвимости POODLE, BEAST) и запрещены стандартами PCI DSS и современными браузерами.

Как проверить список шифров, поддерживаемых удаленным Nginx сервером?

Используйте утилиту testssl.sh или команду: nmap --script ssl-enum-ciphers -p 443 yourdomain.com.

Почему директива ssl_prefer_server_ciphers теперь рекомендуется в положении off?

В протоколе TLSv1.3 выбор шифра всегда остается за клиентом, а для TLSv1.2 современные клиенты сами выбирают оптимальный шифр с учетом аппаратного ускорения AES-NI на их CPU.