您的位置:首页 > 理论基础 > 计算机网络

Android下OkHttp请求自定义HTTPS证书接口设置

2016-04-15 16:34 781 查看
在请求安全性高的接口时,我们可能会使用到HTTPS接口,HTTPS可以理解为HTTP+TLS,关于HTTPS具体是怎么工作的,可以看这篇文章:http://gold.xitu.io/entry/56ef4ff47db2a20052218e0f

如果你的证书是向Android中内置默认信任的证书颁发机构申请的,则不需要通过此步骤(需要好多钱,但是大部分国内应用不会花那么多钱去买权威机构颁发的证书),如果不是,此步骤是在你的App网络请求中加入信任自定义的证书(第三方非权威证书颁发机构颁发的证书),让你的App信任此第三方非权威证书颁发机构。

try {
//取得SSL的SSLContext实例,使用TLS协议
SSLContext sslContext = SSLContext.getInstance("TLS");
//取得KeyManagerFactory和TrustManagerFactory的X509密钥管理器实例
KeyManagerFactory keyManager = KeyManagerFactory.getInstance("X509");
TrustManagerFactory trustManager = TrustManagerFactory.getInstance("X509");
//取得BKS密库实例
KeyStore kks = KeyStore.getInstance("PKCS12");
//Android支持BKS的KeyStore
KeyStore tks = KeyStore.getInstance("BKS");
//加客户端载证书和私钥,通过读取资源文件的方式读取密钥和信任证书

//raw中为truststore.bks的信任密库
tks.load(appCtx
.getResources()
.openRawResource(R.raw.truststore), CLIENT_TRUST_PASSWORD.toCharArray());

//raw资源中的文件为client.p12格式的证书
kks.load(appCtx
.getResources()
.openRawResource(R.raw.client), CLIENT_KET_PASSWORD.toCharArray());

//初始化密钥管理器
keyManager.init(kks, CLIENT_KET_PASSWORD.toCharArray());
trustManager.init(tks);
//初始化SSLContext
sslContext.init(keyManager.getKeyManagers(),
trustManager.getTrustManagers(), null);

mOkHttpClient = OkHttpUtils.getInstance().getOkHttpClient();
mOkHttpClient.setSslSocketFactory(sslContext.getSocketFactory());

} catch (Exception e) {
Log.e(TAG, "init https proxy failed!");
throw new RuntimeException("init https proxy failed!");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: