Retrofit实现HTTPS请求
来源:互联网 发布:倩女幽魂网游mac 编辑:程序博客网 时间:2024/04/29 16:10
服务器下载文件(crt+key转cer)
- 在jdk\bin文件下复制openssl.exe(链接有)
oppenssl.exe - 使用openssl x509 -in (你的服务器).crt -keyform (服务器私钥).key -out (Retrofit使用的Http).cer -outform der
Retrofit请求中配置
使用OkHttpClient.sslSocketFactory()设置Https请求
OkHttpClient build = new OkHttpClient.Builder() // .connectTimeout(20000, TimeUnit.MILLISECONDS) .connectTimeout(10000, TimeUnit.MILLISECONDS) .writeTimeout(10000, TimeUnit.MILLISECONDS) .readTimeout(10000, TimeUnit.MILLISECONDS) //设置Https请求 // .sslSocketFactory(sslSocketFactory) .build();- sslSocketFactory的获取 SSLSocketFactory sslSocketFactory = null; try { //读取raw文件下的server.cer文件,刚刚得到的那个 sslSocketFactory = getSSLSocketFactory_Certificate(App.getApplication(),"BKS", R.raw.server); } catch (CertificateException e) { e.printStackTrace(); } catch (KeyStoreException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); }
getSSLSocketFactory_Certificate()
private static SSLSocketFactory getSSLSocketFactory_Certificate(Context context, String keyStoreType, int keystoreResId) throws CertificateException, KeyStoreException, IOException, NoSuchAlgorithmException, KeyManagementException { CertificateFactory cf = CertificateFactory.getInstance("X.509"); InputStream caInput = context.getResources().openRawResource(keystoreResId); Certificate ca = cf.generateCertificate(caInput); caInput.close(); if(keyStoreType ==null|| keyStoreType.length() ==0) { keyStoreType = KeyStore.getDefaultType(); } KeyStore keyStore = KeyStore.getInstance(keyStoreType); keyStore.load(null,null); keyStore.setCertificateEntry("ca", ca); String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); tmf.init(keyStore); TrustManager[] wrappedTrustManagers = MyTrustManager.getWrappedTrustManagers( tmf.getTrustManagers()); // TrustManager[] wrappedTrustManagers =TrustManager.getWrappedTrustManagers(tmf.getTrustManagers()); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, wrappedTrustManagers,null); return sslContext.getSocketFactory(); }
自定义的TrustManager -> MyTrustManager
public class MyTrustManager implements TrustManager { public static TrustManager[] getWrappedTrustManagers(TrustManager[] trustManagers) { final X509TrustManager originalTrustManager = (X509TrustManager) trustManagers[0]; return new TrustManager[]{ new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return originalTrustManager.getAcceptedIssuers(); } public void checkClientTrusted(X509Certificate[] certs, String authType) { try{ originalTrustManager.checkClientTrusted(certs, authType); }catch(CertificateException e) { e.printStackTrace(); } } public void checkServerTrusted(X509Certificate[] certs, String authType) { try{ originalTrustManager.checkServerTrusted(certs, authType); }catch(CertificateException e) { e.printStackTrace(); } } } }; } }
Retrofit封装
阅读全文
1 0
- Retrofit实现HTTPS请求
- Retrofit Https请求
- 使用Retrofit Https请求
- 基于Retrofit实现HTTPS思路
- 快捷实现网络请求Retrofit
- java 实现https请求
- java 实现https请求
- java 实现https请求
- java 实现https请求
- java 实现https请求
- java 实现https请求
- HTTPS请求实现框架
- java 实现https请求
- java 实现https请求
- httpclient 实现https请求
- java实现https请求
- 使用Retrofit进行Http、Https网络请求(快速上手)
- 使用Retrofit进行Http、Https网络请求(快速上手)
- 使用Mac 虚拟机进行LoadRunner录制App脚本
- 【大数据部落】r、 weka从决策树模型看员工为什么离职?
- rabbitmq简单应用-RPC模式
- Wireshark网络抓包(一)——数据包、着色规则和提示
- 需求边界蔓延
- Retrofit实现HTTPS请求
- 自定义封装上拉加载下拉刷新ListVIew
- .gitignore
- JQuery getJSON()使用注意事项
- 【大数据部落】spss modeler用决策树神经网络预测ST的股票
- 使用InteliJ IDEA无法Reimport maven项目包解决办法。。。
- orcale实现跨库查询,dblink使用
- mysql5.7 MGR集群搭建部署
- 适配器