2013-04-05 76 views
0

我的任務是從HTTPS消息中解析服務器名稱。我被要求從「客戶端問候」擴展和「certicate」,「commonname」字段解析它。TLS握手「證書」消息中的多個證書

「證書」消息中有多個證書。例如,當用https打開google並通過wireshark收聽時,我看到2個證書首先有公用名「* .google.com」,第二個證書有公用名「Google internet authority」。第一個是我連接第二個的服務器名稱是簽署證書的權限。

我的問題可以確定服務器名稱(google.com在我的情況下)將始終在第一個證書消息。如果我只想獲取服務器名稱,是否需要關注證書消息中的其他證書?

+1

訂單可能有所不同,因此您需要獲取所有證書並找到它們中的哪一個是最終實體。 – 2013-04-05 09:12:00

回答

2

事實上,RFC 2246,4346和5246(分別爲TLS 1.0,TLS 1.1和TLS 1.2)中的所有狀態服務器證書應該是第一個:

「這是一個序列(鏈)的X.509v3證書,發件人的 證書必須排在列表中的第一位,每個以下的 證書必須直接證明其前面的證書。

也正是在SSL 3.0明確:

「certificate_list:這是X.509.v3的序列(鏈)
證書,與所述發送者的證書有序首先通過隨後
任何證書頒發機構證書均按順序向上執行
「。

但在現實世界中,有很多錯誤配置的服務器可以以任意順序發送證書,那麼你將不得不重新排序,不好意思的。

+0

準確地說,這讓我感到困惑「發件人的證書必須排在第一位」。你有一個模式的重新排序的建議嗎? – 2013-04-05 10:40:49

+2

@KadirErdemDemir,在每個證書中查找頒發者DN和主題DN:以下證書的主題DN證明前面的證書應該是該證書的頒發者DN。 – Bruno 2013-04-05 10:47:31