gpt4 book ai didi

android - 使用自定义 CA 时 API 17 (JELLY_BEAN) 中的 SSLHandshakeException

转载 作者:太空宇宙 更新时间:2023-11-03 14:08:12 25 4
gpt4 key购买 nike

我需要使用 TLS_v1 连接到我的服务器 API,CA 签署的服务器证书不包含在旧版本的 android 中,所以我使用这个 Google's document实现自定义 TrustManager。一切都适用于 API 18 及更高版本,但在 JELLY_BEAN(API 17) 中抛出 SSLHandshakeException:

java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

我有另一个服务器 URL 和证书(在本例中是自签名的),即使在 JELLY_BEAN 中也可以使用相同的 TrustManager 实现!!

我正在为 HTTPS 客户端使用 OkHttp 2.4。我很困惑出了什么问题?

更新:这是 SSLLabs 的结果:

中间和根 TurkTrust CA(如上所示)已添加到我的 TrustManager

最佳答案

一个可能的解释是服务器需要Server Name Indication (SNI)如果不使用 SNI,则发回正确的证书并仅发送一些默认证书。因此,客户端不会获得预期的证书并且验证会失败。

根据文档,OkHTTP 应该支持 SNI,但是 a recent report否则表示。在更新日志中,我看不到它是何时添加的。也可能是支持取决于底层库。

编辑:根据添加到问题中的 SSLLabs 的报告,现在很明显问题是服务器缺少中间证书。这在

的报告中显示
Chain Issues: Incomplete, Extra Download, ....

在这种情况下,如果客户端已明确添加根 CA (Türktrust Elektronik Sertifika...),这将无济于事,因为由于缺少中间 CA (Türktrust SSL Sertifikasi Hizmitleri),无法从叶子构建信任链站点证书到根证书。从报告中也可以看出,服务器不仅没有包含链证书,而且服务器还添加了一些根本不属于链的证书。因此,我的猜测是曾尝试包含一个链证书,但使用了错误的证书,并且在错误的位置(在根证书之后而不是在主证书之后)使用了错误的证书。

虽然一些桌面浏览器可以解决此类问题,但大多数移动浏览器无法解决此服务器端错误配置,而且 Python、PHP、Java 等的 SSL api 也会失败。因此这是一个需要在服务器端修复的问题。

关于android - 使用自定义 CA 时 API 17 (JELLY_BEAN) 中的 SSLHandshakeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36843098/

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