我需要编写将与.Net服务进行通信的Android应用程序。我必须进行服务器/客户端身份验证。我发现了一些有用的主题(this blog和this blog),但它们都展示了如何进行服务器身份验证。我如何进行客户端身份验证?我找到了一个有用的discussion,但作者使用套接字,但我需要通过HttpClient来实现。
答案 0 :(得分:4)
以下允许我使用自己的rootca和客户端+服务器证书。即没有支付任何钱的安全性:-)
使用openssl创建你的rootca,客户端和服务器密钥和证书(网上有很多这方面的教程)
使用keytool创建rootcacert.bks,bouncycastle作为提供者,-importcert
使用openssl pkcs12 -export ...
创建clientcertandkey.p12HttpClient httpClient = null;
try {
HttpParams httpParameters = new BasicHttpParams();
KeyStore rootca = KeyStore.getInstance("BKS");
rootca.load(getResources().openRawResource(R.raw.rootcacert),"bkskeystorepass".toCharArray());
KeyStore mycert = KeyStore.getInstance("pkcs12");
mycert.load(getResources().openRawResource(R.raw.clientcertandkey),"pkcs12storepass".toCharArray());
SSLSocketFactory sockfact = new SSLSocketFactory(mycert,null,rootca);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("https",sockfact , 443));
httpClient = new DefaultHttpClient(new ThreadSafeClientConnManager(httpParameters, registry), httpParameters);
} catch (Exception e) {
e.printStackTrace();
}