如何排查旧版OpenSSL客户端连接特定服务器的SSL握手失败问题
SSL握手失败排查问题
更新:PCAP文件
已提供对应抓包文件
我有一个2017年开发的应用,使用OpenSSL 1.0.1h(对应文件为ssleay32.dll);另有一个新版本应用,采用近一年发布的curl版本。旧版应用连接特定服务器hazards.fema.gov时出现SSL握手失败错误。
我了解到最常见原因是客户端与服务器无法找到通用密码套件,但通过WireShark抓包分析后,似乎并非此问题:
- 新旧应用均使用TLSv1.2
- 根据SSL Labs测试结果,该服务器支持两个密码套件:
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384(首选) TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - 新版应用提供16个套件(包含上述两个),服务器选择首选套件
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,握手成功; - 旧版应用提供18个套件(包含上述非首选套件),但握手失败。
假设问题并非密码套件不兼容,我想了解如何排查握手失败的原因(我无服务器访问权限)。
补充信息
- 新旧应用均能成功连接另一HTTPS服务器
cameo.noaa.gov。此场景下旧版应用提供78个密码套件,服务器选择TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256;新版应用提供18个套件,服务器同样选择该套件。 - 两台服务器均仅支持TLSv1.2,新旧客户端均可正常使用TLSv1.2。
疑问
- 是否存在
hazards.fema.gov服务器声明支持两个套件,但实际仅支持首选套件的可能? - 若不存在,有什么方法可以获取握手失败的更多信息?
WireShark握手失败截图

更新:握手扩展信息
旧版应用失败场景
Handshake Protocol: Client Hello Handshake Type: Client Hello (1) Length: 164 Version: TLS 1.2 (0x0303) Random: 664d0a89bbdac83cd7a2f8244f6b71b6561e7b36d8b553cee79b5ae4f2916f10 Session ID Length: 0 Cipher Suites Length: 36 Cipher Suites (18 suites) Compression Methods Length: 1 Compression Methods (1 method) Extensions Length: 87 Extension: server_name (len=21) name=hazards.fema.gov Extension: renegotiation_info (len=1) Extension: supported_groups (len=8) Extension: ec_point_formats (len=2) Extension: session_ticket (len=0) Extension: channel_id_old (len=0) Extension: status_request (len=5) Extension: signature_algorithms (len=18) <snip>
新版应用成功场景
Handshake Protocol: Client Hello Handshake Type: Client Hello (1) Length: 508 Version: TLS 1.2 (0x0303) Random: 3f299f8cfc9675877c69d9d858d0b31f5ed6bd8ae9fdc0818bee74ec96f48629 Session ID Length: 32 Session ID: 7eb39bb9ec2e9e53a9b803c1d085ca359289fb7a6202d0b65e3015455dcbc0db Cipher Suites Length: 32 Cipher Suites (16 suites) Compression Methods Length: 1 Compression Methods (1 method) Extensions Length: 403 Extension: Reserved (GREASE) (len=0) Extension: server_name (len=21) name=hazards.fema.gov Extension: supported_versions (len=7) TLS 1.3, TLS 1.2 Extension: status_request (len=5) Extension: key_share (len=43) x25519 Extension: supported_groups (len=10) Extension: signature_algorithms (len=18) Extension: extended_master_secret (len=0) Extension: ec_point_formats (len=2) Extension: application_layer_protocol_negotiation (len=14) Extension: psk_key_exchange_modes (len=2) Extension: application_settings (len=5) Extension: renegotiation_info (len=1) Extension: session_ticket (len=0) Extension: compress_certificate (len=3) Extension: signed_certificate_timestamp (len=0) Extension: Reserved (GREASE) (len=1) Extension: padding (len=199) <snip>
内容的提问来源于stack exchange,提问作者M Katz
相关产品推荐
相关产品推荐

