Android中的SSL客户端身份验证

时间:2011-05-01 11:45:48

标签: android ssl

我需要编写将与.Net服务进行通信的Android应用程序。我必须进行服务器/客户端身份验证。我发现了一些有用的主题(this blogthis blog),但它们都展示了如何进行服务器身份验证。我如何进行客户端身份验证?我找到了一个有用的discussion,但作者使用套接字,但我需要通过HttpClient来实现。

1 个答案:

答案 0 :(得分:4)

以下允许我使用自己的rootca和客户端+服务器证书。即没有支付任何钱的安全性:-)

使用openssl创建你的rootca,客户端和服务器密钥和证书(网上有很多这方面的教程)

使用keytool创建rootcacert.bks,bouncycastle作为提供者,-importcert

使用openssl pkcs12 -export ...

创建clientcertandkey.p12
HttpClient 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();
}