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

错误信息

SSL routines:ssl3_read_bytes:tlsv1 alert protocol version

也可能输出为

  • error:0A00042E:SSL routines::tlsv1 alert protocol version
  • SSL alert number 70

OpenSSL 3.0 和 3.5 都输出“error:0A00042E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:<source>:SSL alert number 70”;OpenSSL 1.1.1 使用的代码是 1409442E。基于 OpenSSL 构建的客户端(curl、Python、Ruby、PHP)显示同样的原因文本。

OpenSSL (client side) — TLS alert 70 (protocol_version) received from the server

含义

客户端从服务器收到了 TLS 告警 70(protocol_version):客户端提供的协议版本,服务器一个都不接受。“tlsv1”只是 OpenSSL 对 TLS 1.0 起定义的告警使用的系列名称。实际情况通常是服务器只支持 TLS 1.0/1.1,而客户端提供的是 1.2 和 1.3;或者客户端被限制在服务器已禁用的版本上。

原因

修复方法

  1. 1.

    找出服务器接受的版本

    显式地逐一尝试每个版本(安全级别 0 允许 TLS 1.0/1.1 基于 SHA-1 的握手,只在这次测试中使用)。

    bash
    for v in tls1 tls1_1 tls1_2 tls1_3; do
      printf '%-7s ' "$v"
      echo | openssl s_client -connect legacy.example.com:443 -servername legacy.example.com -"$v" \
        -cipher 'DEFAULT:@SECLEVEL=0' >/dev/null 2>&1 && echo accepted || echo refused
    done
  2. 2.

    在服务器上启用 TLS 1.2 和 1.3

    更新服务器的协议设置(如果它的 TLS 库早于 TLS 1.2,也要一并更新)。

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

相关错误

浏览完整的签名错误库