近期需要在OkHttp框架上加入自簽名的證書配置https涵亏,參考了這個(gè)兄弟的文章并配置好客戶端證書后,報(bào)了javax.net.ssl.SSLPeerUnverifiedException: Hostname xxx.xxx.xxx.xxx not verified這個(gè)異常并且死活連接不上服務(wù)器岖研,一度懷疑是自己生成的CA證書里的Host有問題,改了好幾遍仍然存在這個(gè)問題。
后來查閱資料后知道,OkHttp不僅需要對(duì)自簽名證書進(jìn)行信任拦英,因?yàn)樽C書不是權(quán)威機(jī)構(gòu)的CA簽名或者其他原因?qū)е伦C書不過審等原因,還需要信任該自簽名證書的Host(需要與證書上注明的Host一致)才能進(jìn)行TLS/SSL握手测秸。
具體代碼如下:
new OkHttpClient.Builder()
.hostnameVerifier(new HostnameVerifier() {?
????@Override
????public boolean verify(String hostname, SSLSession session) { ... }
})
其中在OkHttpClient.Builder().hostnameVerifier()方法內(nèi)指定需要信任的host,在該方法內(nèi)傳入HostnameVerifier()接口類對(duì)象并進(jìn)行重寫該接口的verify方法灾常,verify方法直接返回true表示信任所有host的證書(不安全)霎冯,可以指定hostname為什么值才返回true(表示信任某個(gè)host的證書)。