如何获得SSLCertificateSocketFactory实例?

时间:2012-12-08 16:30:20

标签: android sockets ssl

查看SSLCertificateSocketFactory文档,我无法看到如何使用该工厂来获取此类实例。

我的意思是使用构造函数is deprecated。推荐的getDefault()只返回SocketFactorySSLSocketFactory ...

但是没有方法可以返回 SSLCertificateSocketFactory

我猜一个用户可以使用SSLSocketFactory - 但我有兴趣使用SSLCertificateSocketFactory功能,例如setTrustManagers(),例如可选择使用服务器证书的指纹进行验证。

因此我的问题。

3 个答案:

答案 0 :(得分:1)

不可否认,我不确定SSLCertificateSocketFactory的用途是什么,因为正如您所提到的,工厂并不完全符合人们的期望。当然,你可以指明你的方式,但为什么要这样做呢。

转到SSLContext.getInstance(“TLS”) - 或者,如果你只针对API 9及更高版本,请使用getDefault() - 并使用SSLContext.init()设置TrustManagers,就像其他人一样。< / p>

答案 1 :(得分:0)

不确定你想做什么,对所有解决方案都没有好处。

一个信任所有人here的解决方案,你可以弄清楚你需要修改什么。

我希望它有所帮助!

答案 2 :(得分:0)

参考matheszabi建议的链接

protected org.apache.http.conn.ssl.SSLSocketFactory createAdditionalCertsSSLSocketFactory() {
try {
    final KeyStore ks = KeyStore.getInstance("BKS");

    // the bks file we generated above
    final InputStream in = context.getResources().openRawResource( R.raw.mystore);  
    try {
        // don't forget to put the password used above in strings.xml/mystore_password
        ks.load(in, context.getString( R.string.mystore_password ).toCharArray());
    } finally {
        in.close();
    }

    return new AdditionalKeyStoresSSLSocketFactory(ks);

} catch( Exception e ) {
    throw new RuntimeException(e);
}
}