使用HttpsURLConnection进行https访问的时候,当验证服务器证书的时候,有时候会报下面的错误。
12-24 16:37:04.801: W/(26380): : Hostname '74.208.145.100' was not verified
12-24 16:37:04.801: W/(26380): at (:201)
12-24 16:37:04.801: W/(26380): at (:151)
12-24 16:37:04.802: W/(26380): at (:276)
12-24 16:37:04.802: W/(26380): at (:211)
12-24 16:37:04.802: W/(26380): at (:373)
12-24 16:37:04.802: W/(26380): at (:106)
12-24 16:37:04.802: W/(26380): at (:89)
12-24 16:37:04.802: W/(26380): at (:25)
12-24 16:37:04.802: W/(26380): at $(:75)
12-24 16:37:04.802: W/(26380): at $(:1)
然后查看服务器证书,发现其中的域名为
CN=
而我们的真正请求的域名为
74.208.145.100
错误原因是验证证书时发现真正请求和服务器的证书域名不一致。
解决这个问题有两个方法:
1.重新生成服务器的证书,用真实的域名信息。
2.在客户端代码中增加如下代码,忽略hostname 的验证。(仅仅用于测试阶段,不建议用于发布后的产品中。)
( new HostnameVerifier(){
public boolean verify(String string,SSLSession ssls) {
return true;
}
});