首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在android <= 5上使用过期的交叉签名根信任SSL证书

如何在android <= 5上使用过期的交叉签名根信任SSL证书
EN

Stack Overflow用户
提问于 2020-06-09 04:40:47
回答 1查看 1.4K关注 0票数 2

我在一家使用Comodo/Sectigo证书的公司工作。但是突然间,我们的应用程序在向服务器发送POST时开始抛出这个错误,这两个版本分别是android 4和5,以及Okhttp客户端。

代码语言:javascript
运行
复制
HTTP FAILED: javax.net.ssl.SSLHandshakeException: com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate: Certificate expired at Sat May 30 05:48:38 CDT 2020 (compared to Mon Jun 08 23:13:02 CDT 2020)

我尝试了许多StackOverflow解决方案,但都没有成功。然后我在Comodo博客上找到了这个交叉签名证书警告

目前,Sectigo提供了将证书与AddTrust遗留根交叉签名的能力,以增加对非常老的系统和设备的支持。这个根将于2020年5月底到期。任何依赖于此交叉签名根的应用程序或安装必须在2020年5月之前更新,否则将面临中断或显示错误消息的风险。

我尝试了更多的方法让我的okhttp客户端信任证书(启用套接字上的TLS、添加了现代TLS、TLS版本和密码套件到okhttp构建器中的连接规范,将证书添加到原始资源中,还将自定义的SslSocketFactory添加到客户端),但所有这些都不起作用,总是会引发与证书有效性或握手异常相关的错误。

唯一对我有效的是制造一个不安全的okhttp,但显然不推荐在生产中使用它。

这个应用程序在android > 5中运行良好,但是我们仍然有一些android 5甚至4的用户因为这个问题而不能使用这个应用程序。还有什么方法可以让android <= 5信任这个过期的根呢?

谢谢你的帮忙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-09 07:58:06

如果证书在其他情况下是有效的,这将有望解决这个问题。

在构建文件中

代码语言:javascript
运行
复制
  implementation 'org.conscrypt:conscrypt-android:2.5.1'

在你的请求之前激活氪星

代码语言:javascript
运行
复制
import org.conscrypt.Conscrypt


Security.insertProviderAt(Conscrypt.newProvider(), 1)
val client = OkHttpClient.Builder().build()

val request = Request.Builder().url("https://status.datadoghq.com/").build()
client.newCall(request).execute().use { response ->
  println(response.code())
}

如果它在这之后仍然失败,那么您可能也需要注册一个自定义证书,但是首先不需要进行测试。

3.12.x/samples/guide/src/main/java/okhttp3/recipes/CustomTrust.java

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62275157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档