我在一家使用Comodo/Sectigo证书的公司工作。但是突然间,我们的应用程序在向服务器发送POST时开始抛出这个错误,这两个版本分别是android 4和5,以及Okhttp客户端。
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信任这个过期的根呢?
谢谢你的帮忙
发布于 2020-06-09 07:58:06
如果证书在其他情况下是有效的,这将有望解决这个问题。
在构建文件中
implementation 'org.conscrypt:conscrypt-android:2.5.1'
在你的请求之前激活氪星
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
https://stackoverflow.com/questions/62275157
复制相似问题