科技 · 实用指南
OpenSSL 报 wrong version number?改 TLS 前先证明端口、协议与代理路径
保存准确路径与首批字节,区分明文、错误端口、HTTP 代理、STARTTLS、中间拦截或帧损坏,再决定修复。

“wrong version number” 是记录层线索,不等于对端只支持旧 TLS。它常在任何证书出现前发生,因为收到的首批字节不像 OpenSSL 期待的 TLS 记录。
先保留 URL、主机、端口、代理环境和完整错误,再按直连 TLS、HTTP CONNECT 或正确 STARTTLS 模式复测。只修一个已证明的边界,并用 TLS 身份和应用响应双重验收。
固定准确路径与原始错误
记录应用、OpenSSL 版本、完整 URL、解析地址、端口、代理变量、NO_PROXY 决策,以及 service mesh 或 TLS 检查设备。重试前保留首次失败。
确认是否出现对端证书;若无证书且只读取数个字节,先查协议边界而不是信任库。不得公开代理凭据或含秘密的数据包。
区分直连 TLS、CONNECT 与 STARTTLS
即时 TLS 使用 openssl s_client -connect host:port -servername host -brief 检查;即使指定 IP,SNI 仍应是目标虚拟主机名。
HTTP 代理使用 -proxy 发起 CONNECT;代理端点常是明文 HTTP。SMTP、IMAP、POP3、FTP、LDAP、PostgreSQL 等升级协议应使用对应 -starttls,而不是向明文欢迎端口直接发 ClientHello。
把首批响应当作协议证据
TLS 记录有明确头部与握手顺序。ASCII HTTP 状态、SMTP banner、代理拦截页或产品错误文字,证明预期 TLS 端点之前已有组件响应;保存少量脱敏十六进制与文本。
将响应归属到错误监听器、反向代理端口、健康检查端点、sidecar、出站代理、检查网关或应用协议。不同网络字节不同就比较路径,不把偶然成功称为版本修复。
只修已证明的边界
按证据修正 scheme、端口、代理与 CONNECT 策略、STARTTLS 模式、负载均衡监听器、上游映射或应用帧。不要降低 TLS、削弱密码套件或关闭证书校验。
若首批字节确为 TLS 而在后续协商失败,应依据真实 alert、版本、密码套件、证书或 SNI 另开问题,与记录边界错误分开。
要求同路径 TLS 与应用双验收
从原运行时和网络路径复测,记录目标证书身份、主机名校验、协商协议和密码套件、SNI、代理或 STARTTLS 模式与远端地址。s_client 仅用于诊断,应用仍须强制校验。
最后取得一个无害应用响应:目标虚拟主机 HTTP 状态、STARTTLS 后邮件能力行或数据库协议响应。只是不再出现旧错误不算通过;保留路径清单。
