HttpClient4.5 對HostnameVerifier的處理策略

除了信任驗證和客戶端身份驗證在SSL/TLS協議層進行之外,HttpClient可以有選擇的驗證目標主機名是否跟服務端存儲在X.509認證裏的一致,一旦連接已經建立,這種驗證可以爲服務器認證提供額外的保障,javax.net.ssl.HostnameVerifier 接口代表了主機名驗證的一種策略,HttpClient附帶了兩中javax.net.ssl.HostnameVerifier的實現,注意:不要把主機名驗證跟SSL信任驗證混淆

        DefaultHostnameVerifier: HttpClient使用的默認實現,與RFC2818兼容,主機名必須匹配證書指定的任何可替換的名稱,或者沒有可替換名稱下證書主體中指定的具體的CN,CN和可替換名稱中都可能有通配符。

        NoopHostnameVerifier: 這個主機名驗證器基本上就是把主機名驗證關閉了,它接受任何有效的SSL會話來匹配目標主機。

默認HttpClient使用DefaultHostnameVerifier實現,如果有需要的話你可以指定一個不同的主機名驗證器

SSLContext sslContext = SSLContexts.createSystemDefault();SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory( sslContext, NoopHostnameVerifier.INSTANCE);

        HttpClient4.4使用Mozilla基金會維護的公共後綴列表去確保SSL證書的通配符不會被多個通用頂級域名誤用,HttpClient會附帶一個該列表的最新的拷貝,最新的修正版在https://publicsuffix.org/list/,強烈建議從源數據每天更新一次並且保持一份本地拷貝。

PublicSuffixMatcher publicSuffixMatcher = PublicSuffixMatcherLoader.load( PublicSuffixMatcher.class.getResource("my-copy-effective_tld_names.dat"));DefaultHostnameVerifier hostnameVerifier = new DefaultHostnameVerifier(publicSuffixMatcher);

你可以通過使用null匹配來關閉公共後綴列表驗證

DefaultHostnameVerifier hostnameVerifier = new DefaultHostnameVerifier(null); 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章