2013-07-30 100 views
2

所有主機名列表,如何讓所有的主機名和IP地址,將符合證書(java.security.cert.X509Certificate),也包括主題備用名稱的列表?我只發現了javax.net.ssl.HostnameVerifier s的各種實現。得到匹配的證書

回答

6

主機名稱驗證如何綁定到證書的定義見RFC 2818, Section 3.1(對於HTTPS,對於其他協議,請參閱RFC 6125,但它非常相似)。

簡而言之:

  • 使用您的X509Certificate實例,並遍歷的getSubjectAlternativeNames()結果。
  • 每個條目將是一個2元素的列表。第一個是類型,第二個是實際值。
  • 類型2爲DNS名稱,類型圖7是用於IP地址。你需要分開處理它們。
  • 如果有任何SAN IP地址條目,這些地址添加到您的IP地址列表。
  • 如果有任何SAN DNS名稱的條目,這些名稱添加到您的IP地址列表。
  • 如果沒有任何SAN DNS名稱的條目(但仍可能具有的IP SAN據我所知),您可以讀取證書的主題DN和提取其CN(通用名),並將其添加到列表中。 (參見如何提取CN this question。請注意,「最具體的」 CN在RFC 2818的概念是模糊性認識和RFC解決6125.)

注意一些證書的主機名可能包含通配符,因此您將無法構建可能匹配的詳盡列表。與wilcards相關的這個問題無疑是編寫驗證者通常比嘗試獲取完整列表更重要的原因之一。 (有關位置的詳細信息,請參閱RFC 2818第3.1節,並記住點本身不是通配符表達式的一部分,因此*.example.orgexample.org不匹配。)