okhttp使用https忽略证书验证
2016-05-24 18:20
721 查看
X509TrustManager xtm = new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) { } @Override public void checkServerTrusted(X509Certificate[] chain, String authType) { } @Override public X509Certificate[] getAcceptedIssuers() { X509Certificate[] x509Certificates = new X509Certificate[0]; return x509Certificates; } }; SSLContext sslContext = null; try { sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, new TrustManager[]{xtm}, new SecureRandom()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } }; OkHttpClient okHttpClient = new OkHttpClient.Builder() .addInterceptor(interceptor) .sslSocketFactory(sslContext.getSocketFactory()) .hostnameVerifier(DO_NOT_VERIFY) .build();
之前在网上找到很多关于okhttp忽略https证书的代码,但在使用的时候都遇上了问题
E/AndroidRuntime( 9669): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxxx.android/com.xxxxActivity}: java.lang.NullPointerException: Attempt to get length of null array E/AndroidRuntime( 9669): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2623) E/AndroidRuntime( 9669): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2687) E/AndroidRuntime( 9669): at android.app.ActivityThread.access$800(ActivityThread.java:177) E/AndroidRuntime( 9669): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1557) E/AndroidRuntime( 9669): at android.os.Handler.dispatchMessage(Handler.java:111) E/AndroidRuntime( 9669): at android.os.Looper.loop(Looper.java:199) E/AndroidRuntime( 9669): at android.app.ActivityThread.main(ActivityThread.java:5755) E/AndroidRuntime( 9669): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime( 9669): at java.lang.reflect.Method.invoke(Method.java:372) E/AndroidRuntime( 9669): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:982) E/AndroidRuntime( 9669): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:777) E/AndroidRuntime( 9669): Caused by: java.lang.NullPointerException: Attempt to get length of null array E/AndroidRuntime( 9669): at okhttp3.internal.tls.RealTrustRootIndex.<init>(RealTrustRootIndex.java:31) E/AndroidRuntime( 9669): at okhttp3.internal.Platform.trustRootIndex(Platform.java:100) E/AndroidRuntime( 9669): at okhttp3.internal.Platform$Android.trustRootIndex(Platform.java:249) E/AndroidRuntime( 9669): at okhttp3.OkHttpClient.<init>(OkHttpClient.java:189) E/AndroidRuntime( 9669): at okhttp3.OkHttpClient.<init>(OkHttpClient.java:60) E/AndroidRuntime( 9669): at okhttp3.OkHttpClient$Builder.build(OkHttpClient.java:718)
那是因为在
public X509Certificate[] getAcceptedIssuers() { X509Certificate[] x509Certificates = new X509Certificate[0]; return x509Certificates; }
这个方法中返回的值是null。
相关文章推荐
- Linux实现https方式访问站点
- HTTPS科普扫盲帖
- HTTPS的七个误解
- Centos 5下配置https服务器的方法
- apache https配置详细步骤讲解
- php使用curl打开https网站的方法
- win2003 https 网站的图文配置教程
- IIS7/IIS7.5 URL 重写 HTTP 重定向到 HTTPS的方法
- 安卓APP测试之使用Burp Suite实现HTTPS抓包方法
- android教程使用webview访问https的url处理sslerror示例
- PHP简单实现HTTP和HTTPS跨域共享session解决办法
- php之curl实现http与https请求的方法
- apache中使用mod_gnutls模块实现多个SSL站点配置(多个HTTPS协议的虚拟主机)
- Apache mod_rewrite实现HTTP和HTTPS重定向跳转
- 浅析Android系统中HTTPS通信的实现
- 在服务器上配置仅使用HTTPS通信的教程
- php curl 获取https请求的2种方法
- php使用curl获取https请求的方法
- 在 Django/Flask 开发服务器上使用 HTTPS