【问题标题】:SSL client authentication in AndroidAndroid 中的 SSL 客户端身份验证
【发布时间】:2011-05-01 11:45:48
【问题描述】:

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

【问题讨论】:

  • KeyManagerFactory.getInstance("sunX509"); TrustManagerFactory tmf = trustManagerFactory.getInstance("X509"); tmf.init(ks);

标签: android ssl


【解决方案1】:

以下允许我使用自己的 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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-15
    • 2014-11-13
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    相关资源
    最近更新 更多