2011-04-14 101 views
2

我正在查看一个HTTPS“GET”请求的Microsoft网络监视器捕获,如果由.NET HttpWebRequest执行,它将神秘地永远不会完成。这个TLS警报是什么意思?

我发现,服务器Hello包含一个警告条目,看起来像这样:

enter image description here

我有以下问题:

这是真的警报加密?我知道,如果在密钥交换后发送警报,警报确实会加密,但正如您所看到的,这很快发生在Server Hello的谈判阶段。

如果未加密,是否格式不正确?第一个字节01表示这是一个警告,但70(“协议版本”)是一个致命错误。当然70只能作为02 70的一部分出现?

这是什么意思?“协议版本”提示了erm协议版本。然而,客户端Hello包含“TLS 1.0”作为最大版本,并且服务器Hello也指定了“TLS 1.0”。还有什么可能是错的?

如果有人觉得自己够英勇:)

我用来执行此请求shown in my other question的代码,我可以将整个捕获。

回答

6

这不是加密警报。握手完成后会发出加密警报,这里不是这种情况。第一个字节表示警报致命(2)的重要性,警告(1),第二个字节是说明。在你的情况下,十六进制是70,因此十进制是112,根据RFC 4366是无法识别的。有关更多信息,请参阅RFC 5246中的协议定义。

unrecognized_name表示您在客户端hello中发送的服务器名称与服务器已知的名称不匹配。

+1

我想补充说,你的客户端不应该因为这个警报而终止连接。握手应该已经完成​​。 – Nikos 2011-04-20 10:16:49

+0

Te unrecognized_name根据RFC,警报可能是致命的。在Java 7的情况下,它是致命的。你可以关闭发送SNI:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7127374 – eckes 2012-01-07 12:48:04