javax.net.ssl.SSLException: hostname in certificate didn't match:
16lz
2021-01-24
每个协议有自己的一套SSL东西,Android 链接https经常会抛出如下错误
javax.net.ssl.SSLException: hostname in certificate didn't match: != OR OR at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:185) at org.apache.http.conn.ssl.BrowserCompatHostnameVerifier.verify(BrowserCompatHostnameVerifier.java:54) at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:114) at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:95) at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381) at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:165) at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
如果使用org.apache.http,修改主机名验证解决问题
import org.apache.http.conn.ssl.AllowAllHostnameVerifier; import org.apache.http.conn.ssl.SSLSocketFactory;
SSLSocketFactory.getSocketFactory().setHostnameVerifier(new AllowAllHostnameVerifier());
如果使用原生URLConnect的话添加如下设置
try { SSLContext sc = SSLContext.getInstance("TLS"); sc.init(null, new TrustManager[] { new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return null; } } }, new SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String arg0, SSLSession arg1) { return true; } }); } catch (Exception e) { e.printStackTrace(); }
更多相关文章
- Couldn't find meta-data for provider with authority
- Android(安卓)项目打包时出现“TaskExecutionException :':app:me
- android 一个app启动另一个App的几种方法
- android studio 4.0. gradle 4.0. tinker集成报错
- 在mac 上配置AndroidStudio碰到的坑
- Android的常见错误及解决办法
- 【Android】魅族Flyme OS 3摄像头无法预览的问题
- Android(安卓)Neon
- Android(安卓)音乐播放器 下一曲 连续跳几首歌