AsyncHttpClient实现https,并且实现SSL双向验证

本文详细介绍如何将AsyncHttpClient从HTTP升级到HTTPS,并实现SSL双向验证。包括生成.p12及.bks文件的过程,以及如何在代码中正确配置SSL Socket Factory。

最近由于项目要从http转向https,所以今天折腾了一天搞掂

项目网络请求框架:AsyncHttpClient

具体实现可参考该作者文章:http://www.jianshu.com/p/e9d655281f82 感谢该作者大大


1:先要生成p12文件,在cmd进入到你证书的文件夹;


通过git实现命令openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

【如果你的git没有openSSL,那就自己搞一个吧,具体问度娘】

其中,橙色文件名称就是服务器给你的证书名称


2:生成信任的服务器端证书,即.bks或者.truststore文件

java环境通过keystore 生成

具体可参考文章:http://blog.youkuaiyun.com/zlele0326/article/details/52054897 感谢该作者大大的记录

p12和bks文件生成后就是代码上添加SKK

	private static final String KEY_STORE_TYPE_BKS = "bks";//固定值
	private static final String KEY_STORE_TYPE_P12 = "PKCS12";//固定值
	private static final String KEY_STORE_PASSWORD = "123123";//此密码是你生成证书时输入的密码
	private static final String KEY_STORE_TRUST_PASSWORD = "123123";
	private static KeyStore keyStore;
	private static KeyStore trustStore;
	private static SSLSocketFactory getSocketFactory() {
		SSLSocketFactory socketFactory=null;
		try {
			// 服务器端需要验证的客户端证书
			keyStore = KeyStore.getInstance(KEY_STORE_TYPE_P12);
			// 客户端信任的服务器端证书
			trustStore = KeyStore.getInstance(KEY_STORE_TYPE_BKS);

			//res/raw/文件夹下的.p12文件
		    InputStream ksIn = Tapplication.tapp.getResources().openRawResource(R.raw.client);
			//res/raw/文件夹下的.bks文件
		    InputStream tsIn = Tapplication.tapp.getResources().openRawResource(R.raw.server);
			try {
				keyStore.load(ksIn, KEY_STORE_PASSWORD.toCharArray());
				trustStore.load(tsIn, KEY_STORE_TRUST_PASSWORD.toCharArray());
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				try {
					ksIn.close();
				} catch (Exception ignore) {
				}
				try {
					tsIn.close();
				} catch (Exception ignore) {
				}
			}
			socketFactory = new SSLSocketFactory(keyStore, KEY_STORE_PASSWORD, trustStore);
			socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
		} catch (KeyManagementException e) {
			e.printStackTrace();
		} catch (UnrecoverableKeyException e) {
			e.printStackTrace();
		} catch (KeyStoreException e) {
			e.printStackTrace();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		return  socketFactory;
	}

AsyncHttpClient devClient = new AsyncHttpClient();
devClient.setSSLSocketFactory(getSocketFactory());

这时候你打包的时候你会发现你的as无法正常安装apk,原因是前面你使用keystore生成证书的时候修改了jdk,所以你把你加上去的东西都还原,你的as就可以正常安装apk了

至此,你的 AsyncHttpClient就可以支持https外加SSL验证了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值