如何信任具有交叉签名根的SSL证书在android <= 5上已过期

问题描述 投票:0回答:1

我为使用Comodo / Sectigo SSL证书的公司工作。但是突然之间,我们的应用在使用ok 4客户端的android 4和5版本中将POST发送到服务器时开始引发此错误。

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博客上发现了此交叉签名证书warning

Sectigo目前提供了与证书交叉签名的功能 AddTrust旧版根目录可增加对非常旧系统的支持 和设备。此根将于2020年5月结束。 依赖此交叉签名的根的应用程序或安装 必须在2020年5月之前更新,否则可能会出现断电或显示故障的风险 错误消息。

我尝试了一些其他操作,以使okhttp客户端信任证书(在Socket上启用了TLS,在okhttp构建器中的连接规范中添加了现代TLS,TLS版本和密码套件,将证书添加到了原始资源中,一个自定义的SslSocketFactory客户端),但是这些都不起作用,总是向我抛出一个与证书有效性或握手异常有关的错误。

唯一对我有用的方法是创建一个不安全的okhttp,但显然不建议在生产环境中使用它。

[该应用程序在android> 5中运行良好,但由于此问题,我们仍然在android 5甚至4上仍有一些用户无法使用该应用程序。还有什么方法可以实现android <= 5信任这个过期的根吗?

感谢您的帮助

android ssl-certificate retrofit android-5.0-lollipop okhttp
1个回答
0
投票

如果证书在其他方面有效,则有望解决此问题。

在您的构建文件中

  implementation 'org.conscrypt:conscrypt-android:2.4.0'

并在您请求之前激活Conscrypt

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())
}

如果在此之后仍然失败,那么您可能还需要注册一个自定义证书,但请首先进行测试,然后再进行此操作。

https://github.com/square/okhttp/blob/okhttp_3.12.x/samples/guide/src/main/java/okhttp3/recipes/CustomTrust.java

© www.soinside.com 2019 - 2024. All rights reserved.