TLS 握手失败排查指南:从诊断到解决
TLS 握手失败是 HTTPS 连接问题中最常见的情况之一。当浏览器显示"ERR_CONNECTION_CLOSED"或"PR_CONNECT_RESET_ERROR"等错误时,很可能是 TLS 握手出现了问题。本文将深入讲解 TLS 握手失败的常见原因,以及如何使用 OpenSSL 工具进行诊断和排查。 1. TLS 握手失败概述 TLS 握手是建立安全连接的关键过程,涉及版本协商、加密套件选择、证书验证、密钥交换等多个步骤。任何一步出现问题都可能导致握手失败。 握手失败通常表现为: 浏览器无法加载页面 连接立即关闭 证书错误警告 协议不兼容错误 2. 常见的握手失败原因 2.1 证书问题 证书相关问题是握手失败的最常见原因: 证书过期:服务器证书已过有效期 域名不匹配:证书 CN/SAN 与访问域名不一致 证书链不完整:中间证书缺失 自签名证书:客户端不信任该 CA 证书被吊销:CRL/OCSP 检查失败 2.2 协议版本不兼容 客户端和服务器支持的 TLS 版本不匹配: 客户端只支持 TLS 1.0/1.1,服务器已禁用 客户端不支持 TLS 1.3,服务器只启用 TLS 1.3 使用废弃的 SSL 协议 2.3 加密套件不匹配 服务器不支持客户端提供的任何加密套件: 服务器只启用了较旧的加密套件 客户端请求的加密套件被服务器禁用 客户端和服务器没有共同的加密套件 2.4 客户端证书问题(mTLS 场景) 在双向 TLS 认证中: 客户端证书过期或无效 客户端证书不在服务器信任列表中 3. 使用 OpenSSL 诊断 3.1 基本诊断命令 1 2 3 4 5 # 基础连接测试,获取证书和握手信息 openssl s_client -connect example....