Перейти к содержимому
ecdsa.com
.NET on Linux (SslStream over OpenSSL).NET

Сообщение об ошибке

SSL Handshake failed with OpenSSL error - SSL_ERROR_SSL.

Также выводится как

  • Interop+OpenSsl+SslException: SSL Handshake failed with OpenSSL error - SSL_ERROR_SSL.

Цепочка целиком выглядит так: «The SSL connection could not be established» → «Authentication failed, see inner exception.» → это сообщение → причина от OpenSSL (например, «error:0A000410:SSL routines::sslv3 alert handshake failure» в OpenSSL 3.0, «ssl/tls alert handshake failure» в 3.3 и новее). В Windows (Schannel) и macOS (TLS-стек Apple) .NET сообщает о таких сбоях другими сообщениями, своими для каждой платформы.

.NET on Linux (SslStream over OpenSSL) — inner exception carrying the OpenSSL reason

Что это означает

В Linux SslStream в .NET работает поверх системного OpenSSL, и рукопожатие завершилось ошибкой внутри OpenSSL с кодом SSL_ERROR_SSL. Эта строка — лишь обёртка: настоящую причину от OpenSSL, например оповещение от сервера или отклонённую версию протокола, содержит следующее внутреннее исключение (Interop+Crypto+OpenSslCryptographicException).

Почему это происходит

Как исправить

  1. 1.

    Прочитайте причину от OpenSSL в самом внутреннем исключении

    Код ошибки error:0A… и её текст указывают на проблему; сопоставьте их с причиной, как показано ниже.

    text
    Interop+Crypto+OpenSslCryptographicException: error:0A000410:SSL routines::sslv3 alert handshake failure
          -> the server rejected the offered suites/versions (or wants a client certificate)
    error:0A00042E:SSL routines::tlsv1 alert protocol version   -> the server only speaks TLS 1.0/1.1
    error:0A00018A:SSL routines::dh key too small              -> the server uses 1024-bit DH
  2. 2.

    Сравните возможности сервера и клиента

    Перечислите наборы шифров сервера и настройки локального OpenSSL по умолчанию.

    bash
    nmap --script ssl-enum-ciphers -p 443 legacy.example.com     # what the server offers
    openssl ciphers -v 'DEFAULT' | head                            # what this system's OpenSSL offers
  3. 3.

    Исправляйте сервер, а не политику клиента

    Обновите TLS-конфигурацию сервера; ослабляйте политику OpenSSL на клиенте только как узкое временное исключение.

    text
    Server side: enable TLS 1.2/1.3 with ECDHE + AES-GCM (or ChaCha20) suites. Lowering the
    system-wide OpenSSL policy (CipherString=DEFAULT@SECLEVEL=1 in openssl.cnf) affects every
    application on the host and should only be a short-lived exception for an isolated legacy peer.

Связанные ошибки

Открыть всю базу ошибок подписей