【发布时间】:2021-12-20 04:12:42
【问题描述】:
我正在尝试使用 Volley Libary 从 JSON API 加载数据,这在使用 API 级别 30 时工作得很好,但是当我尝试在运行 API 级别 24 的设备上使用该应用程序时,我收到以下错误:
Request failed: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
我已经阅读了this Post 关于类似问题的文章,但对我来说,更改 Web 服务器的配置不是一个选项,因为它在 API 级别 30 及以上的设备(以及我尝试过的每个浏览器)上都可以正常工作证书没有问题),我认为问题可能出在其他地方。为了在旧版本的 Android 上运行,我需要进行什么不同的配置吗?
顺便说一句,这是我用于 API 请求的代码(显然我更改了一些东西,例如 URL 以及我如何处理我返回的东西,但这可能不会对我遇到的问题产生影响应该没问题)
val requestQueue = Volley.newRequestQueue(this.context)
requestQueue.add(JsonArrayRequest("https://subdomain.the.url",
{ response ->
//Handle Response
},
{ volleyError ->
//Handle Errors
}
))
【问题讨论】:
-
有没有机会,证书是最近由letsencrypt颁发的?然后,您可能会提供一个植根于其自签名 isrg 根的证书链,Android 设备 不信任该证书链
-
从十月开始,大概是这样,谢谢。只是出于好奇,为什么较新的 API 仍然接受它们?我希望这样的更改只会影响较旧的 API 级别或所有 API 级别
-
从 Android 7.1.1 开始,“新”(到现在已经 6 年多了)根证书是 Android 信任库的一部分。因此,自 Android 7.1.1 以来,所有以该证书为根的证书链都受到任何设备的信任。所有旧设备的信任存储中都没有该根证书,因此它们无法验证该证书的可信来源。跨度>
标签: kotlin ssl android-volley