Android在使用HttpClient访问https时认证策略
Android中自带Apache的HttpClient包,详见google的API[url]
http://developer.android.com/reference/org/apache/http/package-summary.html
[/url]所以在无需要任何引用的情况下就可以使用HttpClient相关的东西。但是,Android中的HttpClient与http://hc.apache.org/downloads.cgi中的httpclient还是有所区别的,最主要的一个区别就是,Post方法时,Android的包支持自动重定向,而Apache官方的包不支持。
当访问https时,认证方案在客户端可以决定是否验证服务器,而服务器端可以选择是否验证客户端,如果双方都选择验证那么,就是双向验证;如果有一方选择不验证,那就是单向验证。作为客户端的Android单向验证和双向验证如下。
1 单向验证,即不验证服务器,在连接过程中首先读取本地客户端证书,然后采用不验证服务端信任证书的方式建立SSLContext,建立主要过程如下:
SSLContext sslContext = SSLContext.getInstance(Constants.SSL.AGREEMENT); KeyManagerFactory keyManager = KeyManagerFactory.getInstance(Constants.SSL.KEY_MANAGER); TrustManagerFactory trustManager = TrustManagerFactory.getInstance(Constants.SSL.TRUST_MANAGER); KeyStore keyKeyStore = KeyStore.getInstance(Constants.SSL.KEY_KEYSTORE); KeyStore trustKeyStore = KeyStore.getInstance(Constants.SSL.TRUST_KEYSTORE); FileInputStream kIs = new FileInputStream(mPath); keyKeyStore.load(kIs,KSPWD.toCharArray()); kIs.close(); FileInputStream tkIS = new FileInputStream(mPath); trustKeyStore.load(tkIS,TKSPWD.toCharArray()); tkIS.close(); keyManager.init(keyKeyStore,KSPWD.toCharArray()); trustManager.init(trustKeyStore); sslContext.init(keyManager.getKeyManagers(), trustManager.getTrustManagers(), null);