跳到主要内容
ecdsa.com
OpenSSL (client side)OpenSSL CLI

错误信息

SSL routines:ssl_choose_client_version:unsupported protocol

也可能输出为

  • error:0A000102:SSL routines::unsupported protocol

openssl CLI 输出“<thread>:error:0A000102:SSL routines:ssl_choose_client_version:unsupported protocol:<source>”;curl、Node.js 和其他应用显示“error:0A000102:SSL routines::unsupported protocol”。OpenSSL 1.1.1 使用的代码是 1425F102。

OpenSSL (client side) — SSL_R_UNSUPPORTED_PROTOCOL: the server chose a version the client does not allow

含义

客户端提供了 TLS 1.2 和 1.3,但服务器在 ServerHello 中选择了更旧的版本(通常是 TLS 1.0),而客户端的 OpenSSL 不允许使用这个版本。客户端在 ssl_choose_client_version 中中止。旧的 TLS 协议栈会忽略客户端提供的版本范围,直接用自己的版本应答;现代协议栈则会以 protocol_version 告警拒绝。

原因

修复方法

  1. 1.

    确认服务器使用的版本

    只在这一条诊断命令中以安全级别 0 强制使用 TLS 1.0,就能看出服务器是否只支持旧版本。

    bash
    # Allowed only for this diagnostic command: which version does the server pick?
    echo | openssl s_client -connect legacy.example.com:443 -servername legacy.example.com \
      -tls1 -cipher 'DEFAULT:@SECLEVEL=0' -brief 2>&1 | grep -E 'Protocol version|error'
  2. 2.

    在服务器上启用 TLS 1.2 和 1.3

    升级服务器(或在它前面放置现代的 TLS 终止代理)是唯一的长久之计。

    text
    # Server side
    ssl_protocols TLSv1.2 TLSv1.3;     # nginx
    SSLProtocol -all +TLSv1.2 +TLSv1.3 # Apache httpd

相关错误

浏览完整的签名错误库