Android 中的 SSL 客户端身份验证

dri*_*ter 4 ssl android

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

Ste*_*tes 5

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

使用 openssl 创建您的 rootca、客户端和服务器密钥和证书(网络上有很多关于此的教程)

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

使用 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();
}
Run Code Online (Sandbox Code Playgroud)