普通网友 2026-01-27 20:30 采纳率: 98.3%
浏览 3
已采纳

使用了不受支持的协议:TLS 1.0/1.1 导致 HTTPS 站点握手失败

常见问题:现代浏览器(Chrome 120+、Firefox 118+、Edge 120+)及主流操作系统(Windows 11/Server 2022、iOS 17+、Android 13+)已默认禁用 TLS 1.0 和 TLS 1.1 协议。当客户端访问仍仅支持 TLS 1.0/1.1 的 HTTPS 站点时,TLS 握手阶段即被中止,表现为“ERR_SSL_VERSION_OR_CIPHER_MISMATCH”“Secure Connection Failed”等错误,页面空白或直接跳转至安全警告页。该问题并非证书失效或网络中断所致,而是协议协商失败——客户端不发送 TLS 1.0/1.1 ClientHello,服务端无响应或返回 Alert(40),导致连接在 TCP 建立后、HTTP 请求前即断开。尤其影响老旧内网系统、嵌入式设备管理后台、未更新的第三方 SDK 或遗留 Java/.NET Framework 4.5 以下应用。排查时需通过 Wireshark 抓包确认 ClientHello 支持的 TLS 版本,或使用 `openssl s_client -connect example.com:443 -tls1_1` 验证服务端是否强制降级。根本解法是服务端升级至 TLS 1.2+ 并配置强加密套件。
  • 写回答

1条回答 默认 最新

  • Jiangzhoujiao 2026-01-27 20:30
    关注
    ```html

    一、现象层:典型错误表现与用户侧感知

    • Chrome 120+ 显示 ERR_SSL_VERSION_OR_CIPHER_MISMATCH,无详细技术日志,仅白屏或跳转至“您的连接不是私密连接”警告页
    • Firefox 118+ 报 Secure Connection Failed — SSL_ERROR_UNSUPPORTED_VERSION,地址栏锁图标消失且显示“⚠️ 不安全”
    • iOS 17+ Safari 在 WKWebView 中静默失败(NSURLErrorDomain -1200),不触发 didFailProvisionalNavigation 的常规错误回调
    • Android 13+ WebView 或 OkHttp 4.11+ 默认禁用 TLS 1.0/1.1,javax.net.ssl.SSLHandshakeException: Connection closed by peer 成为高频堆栈首行

    二、协议层:TLS 握手失败的本质机制

    现代客户端(如 Chromium/Blink 内核)在 TCP 连接建立后,主动过滤掉 TLS 1.0/1.1 的 ClientHello 发送逻辑——并非“尝试后失败”,而是根本不出包。服务端若仅监听 TLS 1.1,将收不到任何有效握手帧,TCP 连接在约 3–5 秒后由客户端 RST 中断。Wireshark 抓包关键特征如下:

    帧序号源IP→目的IP协议Info
    1192.168.1.100 → 10.20.30.40TCPSYN
    210.20.30.40 → 192.168.1.100TCPSYN, ACK
    3192.168.1.100 → 10.20.30.40TCPACK
    4192.168.1.100 → 10.20.30.40TCPRST, ACK (无 TLS 流量!)

    三、验证层:多维度精准定位问题归属

    1. 客户端能力探测curl -v --tlsv1.1 https://legacy.example.com(返回 Protocol "https" not supported or disabled in libcurl 即证实客户端策略拦截)
    2. 服务端响应验证openssl s_client -connect legacy.example.com:443 -tls1_1 -msg 2>/dev/null | grep "Protocol" 若输出 Protocol : TLSv1.1,说明服务端仍可响应;若超时或报 connect: Connection refused,则服务端已关闭该协议监听端口
    3. 中间设备审计:检查负载均衡器(F5 BIG-IP v16+)、WAF(Cloudflare TLS 1.0/1.1 策略默认 OFF)、反向代理(Nginx 1.19+ ssl_protocols TLSv1.2 TLSv1.3;)是否隐式降级或透传失败

    四、根因层:遗留系统的技术债务图谱

    graph LR A[TLS 1.0/1.1 依赖系统] --> B[Java 6/7 + JSSE 默认配置] A --> C[.NET Framework 4.0–4.5.1 未显式启用 TLS 1.2] A --> D[OpenSSL 1.0.1e 或更早版本] A --> E[嵌入式设备 Web Server
    (如 Boa 0.94.14, lighttpd 1.4.28)] A --> F[老旧 HSM 或 PKI 中间件
    (Thales nShield 12.x, SafeNet Luna SA 5.x)]

    五、解法层:分级治理路径与兼容性权衡

    • 紧急绕过(仅限隔离内网):Chrome 启动参数 --unsafely-treat-insecure-origin-as-secure="https://legacy.internal" --user-data-dir=/tmp/chrome-tls11(⚠️ 仅调试,不可上线)
    • 服务端升级(推荐)
      # Nginx 示例:强制 TLS 1.2+,禁用弱套件
      ssl_protocols TLSv1.2 TLSv1.3;
      ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
      ssl_prefer_server_ciphers off;
    • 应用层适配(Java):JVM 启动参数 -Dhttps.protocols=TLSv1.2 -Djdk.tls.client.protocols=TLSv1.2 + SSLContext.setDefault(SSLContext.getInstance("TLSv1.2"))
    ```
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 1月28日
  • 创建了问题 1月27日