2011-04-14 155 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