Android SSL 验证服务器证书 Hostname 不匹配错误。
2014-12-25 06:46
260 查看
使用HttpsURLConnection进行https访问的时候,当验证服务器证书的时候,有时候会报下面的错误。
然后查看服务器证书,发现其中的域名为
CN=www.onlinehome-server.com
而我们的真正请求的域名为
74.208.145.100
错误原因是验证证书时发现真正请求和服务器的证书域名不一致。
解决这个问题有两个方法:
1.重新生成服务器的证书,用真实的域名信息。
2.在客户端代码中增加如下代码,忽略hostname 的验证。(仅仅用于测试阶段,不建议用于发布后的产品中。)
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; } });
相关文章推荐
- 主题:在Android上实现SSL握手(客户端需要密钥和证书),实现服务器和客户端之间Socket交互
- 在Android上实现SSL握手(客户端需要密钥和证书),实现服务器和客户端之间Socket交互
- linux下svn不能连接上windows服务器:SSL handshake failed: SSL 错误:在证书中检测到违规的密钥用法
- linux下svn不能连接上windows服务器:SSL handshake failed: SSL 错误:在证书中检测到违规的密钥用法
- 对于httpclient在android5.0及以下的系统中,访问多证书的服务器时出现hostname验证不过
- Axis 1 https(SSL) client 证书验证错误ValidatorException workaround
- android ssl双向验证 X509证书信任管理器类的实现及应用
- 转载:在Android上实现SSL握手(客户端需要密钥和证书),实现服务器和客户端之间Socket交互
- 转载:在Android上实现SSL握手(客户端需要密钥和证书),实现服务器和客户端之间Socket交互
- linux下svn不能连接上windows服务器:SSL handshake failed: SSL 错误:在证书中检测到违规的密钥用法
- 【求助,已解决】已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL 提供程序, error: 0 - 为验证提供的消息或签名已被改变)
- linux下svn不能连接上windows服务器:SSL handshake failed: SSL 错误:在证书中检测到违规的密钥用法
- 为微信小程序搭建https服务,证书申请及配置。Apache服务器。重点描述request:fail ssl hand shake error 错误
- linux下svn不能连接上windows服务器:SSL handshake failed: SSL 错误:在证书中检测到违规的密钥用法
- Axis 1 https(SSL) client 证书验证错误ValidatorException workaround
- linux下svn不能连接上windows服务器:SSL handshake failed: SSL 错误:在证书中检测到违规的密钥用法
- 在Android上实现SSL握手(客户端需要密钥和证书),实现服务器和客户端之间Socket交互
- Android HTTPS(SSL)双向验证服务器验证的一种思路
- Android 访问 Tomcat SSL双向验证服务器。
- ASP.NET - ASP.NET 服务器控件的验证错误信息布局