本文共 1746 字,大约阅读时间需要 5 分钟。
使用HttpsURLConnection进行https访问的时候,当验证服务器证书的时候,有时候会报下面的错误。
12-24 16:37:04.801: W/System.err(26380): java.io.IOException: Hostname '74.208.145.100' was not verified
12-24 16:37:04.801: W/System.err(26380): at com.android.okhttp.Connection.upgradeToTls(Connection.java:201)
12-24 16:37:04.801: W/System.err(26380): at com.android.okhttp.Connection.connect(Connection.java:151)
12-24 16:37:04.802: W/System.err(26380): at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276)
12-24 16:37:04.802: W/System.err(26380): at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)
12-24 16:37:04.802: W/System.err(26380): at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373)
12-24 16:37:04.802: W/System.err(26380): at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106)
12-24 16:37:04.802: W/System.err(26380): at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89)
12-24 16:37:04.802: W/System.err(26380): at com.android.okhttp.internal.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:25)
12-24 16:37:04.802: W/System.err(26380): at com.example.ssl.MainActivity$1.doInBackground(MainActivity.java:75)
12-24 16:37:04.802: W/System.err(26380): at com.example.ssl.MainActivity$1.doInBackground(MainActivity.java:1)
然后查看服务器证书,发现其中的域名为
CN=www.onlinehome-server.com
而我们的真正请求的域名为
74.208.145.100
错误原因是验证证书时发现真正请求和服务器的证书域名不一致。
解决这个问题有两个方法:
1.重新生成服务器的证书,用真实的域名信息。
2.在客户端代码中增加如下代码,忽略hostname 的验证。(仅仅用于测试阶段,不建议用于发布后的产品中。)
HttpsURLConnection.setDefaultHostnameVerifier( new HostnameVerifier(){
public boolean verify(String string,SSLSession ssls) {
return true;
}
});
转载地址:https://blog.csdn.net/weixin_33308985/article/details/117347410 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!