OkHttp配置https使用自签名证书问题

近期需要在OkHttp框架上加入自签名的证书配置https,参考了这个兄弟的文章并配置好客户端证书后,报了javax.net.ssl.SSLPeerUnverifiedException: Hostname xxx.xxx.xxx.xxx not verified这个异常并且死活连接不上服务器,一度怀疑是自己生成的CA证书里的Host有问题,改了好几遍仍然存在这个问题。

后来查阅资料后知道,OkHttp不仅需要对自签名证书进行信任,因为证书不是权威机构的CA签名或者其他原因导致证书不过审等原因,还需要信任该自签名证书的Host(需要与证书上注明的Host一致)才能进行TLS/SSL握手。

具体代码如下:

new OkHttpClient.Builder()

.hostnameVerifier(new HostnameVerifier() { 

    @Override

    public boolean verify(String hostname, SSLSession session) { ... }

})


其中在OkHttpClient.Builder().hostnameVerifier()方法内指定需要信任的host,在该方法内传入HostnameVerifier()接口类对象并进行重写该接口的verify方法,verify方法直接返回true表示信任所有host的证书(不安全),可以指定hostname为什么值才返回true(表示信任某个host的证书)。

你可能感兴趣的:(OkHttp配置https使用自签名证书问题)