System.Net 跟踪确实包含足够的详细信息来检查这一点,尽管它不是很容易访问。
此 KB 描述了如何打开 System.Net 跟踪。
此博客文章显示了 System.Net 跟踪中的完整 HTTPS 请求。
通过线路发送的字节被记录下来,在该博客文章中给出的示例中,客户端流开始:
System.Net.Sockets Verbose: 0 : [3848] Data from Socket#48285313::Send
System.Net.Sockets Verbose: 0 : [3848] 00000000 : 16 03 00 00 41 01 00 00-3D 03 00 43 26 02 90 83 : ....A...=..C&...
RFC5246 描述 TLS 1.2 并解释 ClientHello 是预期的第一条消息并说明其格式:
struct {
ProtocolVersion client_version;
Random random;
SessionID session_id;
CipherSuite cipher_suites<2..2^16-2>;
CompressionMethod compression_methods<1..2^8-1>;
select (extensions_present) {
case false:
struct {};
case true:
Extension extensions<0..2^16-1>;
};
} ClientHello;
这个 SO 答案解释了记录以 0x16 作为类型标记开始,然后是协议版本。
上面显示的会话版本为 3.0,即 SSL 3.0。
RFC 解释说 3.3 是 TLS 1.2。
因此,如果您的客户端数据以“ 16 03 03
”开头,那么您的客户端正在尝试协商 TLS 1.2。
您可能需要检查 ServerHello 以确定实际使用的版本。