2

查看SSLCertificateSocketFactory文档,我看不到如何使用该工厂来获取这样的实例。

我的意思是不推荐使用构造函数。推荐的getDefault()只是返回一个SocketFactory或一个SSLSocketFactory...

但是没有返回SSLCertificateSocketFactory的方法。

我想在某些用例中可以使用 SSLSocketFactory - 但我对使用 SSLCertificateSocketFactory 功能感兴趣setTrustManagers(),例如,可选地使用服务器证书的指纹进行验证。

因此我的问题。

4

3 回答 3

1

诚然,我不确定 SSLCertificateSocketFactory 的用途是什么,因为正如您所提到的,工厂并不完全符合人们的期望。当然,您可以按自己的方式进行类型转换,但为什么要这样做。

选择 SSLContext.getInstance("TLS") - 或者,如果您只针对 API 9 及更高版本,则使用 getDefault() - 并使用 SSLContext.init() 来设置 TrustManager,就像其他人显然所做的那样。

于 2013-01-09T17:08:25.310 回答
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);
}
}
于 2012-12-08T16:40:41.140 回答
0

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

一个信任每个人的解决方案,它在这里,你可以弄清楚你需要修改什么。

我希望它有帮助!

于 2012-12-08T16:33:57.333 回答