gpt4 book ai didi

kotlin - 让 SSL 证书在 API 中工作(添加自定义 SSL 证书)

转载 作者:行者123 更新时间:2023-12-04 22:39:01 29 4
gpt4 key购买 nike

我正在尝试使用 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
}
))

最佳答案

正如@derpirscher 在评论中指出的那样,问题在于 API 级别 <25 不接受 Let's Encrypt 使用的根证书。
在我添加我的解决方法之前,我应该说我不是专业人士,所以你不应该只是复制我的东西。
我选择的解决方法是手动将此证书添加到我的应用程序中接受的证书中,如下所示。 (文档中的文章可以找到(The Article in the Documentation can be found here)
为此,您首先必须添加一个网络安全配置,在我的例子中包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="@raw/isrg_root_x1"/>
<certificates src="system"/>
</trust-anchors>
</base-config>
</network-security-config>
请注意,我信任两件事:首先是 ISRG 根 X1 证书,这是所描述问题的原因,还有 Android 默认信任的标准证书。
然后你必须告诉 Android 在你的 Android Manifest 中使用这个配置。为此,您必须将以下属性添加到您的标签
android:networkSecurityConfig="@xml/network_security_config"
(将 @xml/network_security_config 替换为您的配置位置)
然后,您还必须添加实际的证书。由于这不会在 XML 中,您应该首先将原始目录添加到您的项目的 res 文件夹中,因为如果您只是将证书放在 res 文件夹中,它可能不会起作用。当您拥有该文件夹时,下载证书( this 应该是下载链接,但您可能应该自己获取下载链接,而不仅仅是信任 Internet 上的某个人 :D)并将其放入创建的文件夹中。如果您在网络配置中收到错误,请检查证书文件是否正确命名。

关于kotlin - 让 SSL 证书在 API 中工作(添加自定义 SSL 证书),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69864540/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com