【问题标题】:Class not found exception from OpenSSLSocketImpl after upgrading Security Provider升级安全提供程序后从 OpenSSLSocketImpl 中找不到类异常
【发布时间】:2016-11-04 21:09:09
【问题描述】:

根据 Android 开发人员和Updating Your Security Provider to Protect Against SSL Exploits,应升级 Android 4.x 操作系统中的安全提供程序以避免已知漏洞。使用 ProviderInstaller 类的 Google Play 服务,我们可以升级。

当我们尝试访问OpenSSLSocketImpl 类时,如下面的代码 sn-p 所示,它会抛出 class not found 异常。

Class.forName("com.google.android.gms.org.conscrypt.OpenSSLSocketImpl");

为什么OpenSSLSocketImpl 会导致找不到类异常?

要使用最新的 OpenSSL 库,我们还应该执行什么操作?

【问题讨论】:

  • @jww 感谢您改进问题。
  • 嗨@jww,可能是因为播放服务被混淆了?

标签: java android openssl google-play-services


【解决方案1】:

实现类不是 API 的一部分,因此您不应直接引用它们。

【讨论】:

  • 感谢您的回答。同意 OpenSSLSocketImpl 是一个内部类。但是如下链接所示,OkHttp 通过使用 conscrypt 和 JSSE 提供者的 OpenSSlSocketImpl 上的反射,提供了 SNI 等模型 TLS 功能。同样,对于 Google GMS 库,需要相同的实现才能拥有最新的 TLS 扩展。但是正如问题所说,它在我们进行反射时会引发异常。 gitlab.com/tongyang/okhttp/blob/…
  • 尝试使用 com.android.org.conscrypt 包。
  • 是的,这是有效的。 org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl 也可以在较旧的 Android 操作系统中运行。但由于旧版 OpenSSL 存在漏洞,谷歌在 GMS Conscrypt 中提供了补丁。补丁安装在设备中。我检查了“GMSCore_OpenSSL”提供程序是否存在。但正如上面评论中所说,这里的问题是启用 SNI,但不能因为反射不成功。
  • @user4756956 - “这里的问题是启用 SNI,但不能因为反射不成功。...” - 也许下一条路是在不依赖反射的情况下启用 SNI 的方法? SNI 函数SSL_CTX_set_tlsext_servername_callback(服务器)和SSL_set_tlsext_host_name(客户端)至少从 1.0.1 开始就存在了。
  • @jww 谢谢。但这些是 openssl 库的内部功能。不知道如何在Android中使用。
猜你喜欢
  • 2020-05-12
  • 1970-01-01
  • 2017-09-16
  • 2020-11-29
  • 2012-08-11
  • 2011-04-01
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多