【问题标题】:How to get an SSLCertificateSocketFactory instance?如何获取 SSLCertificateSocketFactory 实例?
【发布时间】:2012-11-26 14:16:08
【问题描述】:

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

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

但是没有返回SSLCertificateSocketFactory的方法。

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

这是我的问题。

【问题讨论】:

    标签: android sockets ssl


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      参考 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);
      }
      }
      

      【讨论】:

        【解决方案3】:

        不确定你想做什么,这不是一个适合所有解决方案的解决方案。

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

        希望对你有帮助!

        【讨论】:

          猜你喜欢
          • 2018-02-20
          • 2019-07-08
          • 2010-10-12
          • 2019-07-08
          • 1970-01-01
          • 2023-03-03
          • 2012-10-11
          • 2020-06-23
          • 2015-01-19
          相关资源
          最近更新 更多