我想要做的事情非常简单 - 我想从iOS和Android应用连接到服务器时获得完整的证书链。无法从Android链中获取根CA证书
在iOS中,我使用NSURLSession
和压倒一切的URLSession:didReceiveChallenge:
方法,其中,我能够获得在这种情况下看起来像预期的证书链:
[leaf certificate] - [intermediate certificate] - [root certificate]
可爱。
现在我正尝试在Android设备上使用HttpsURLConnection
做同样的事情。连接到服务器后,我正在使用getServerCertificates()
方法获得证书链(或至少我希望这是它的方法)。这将返回我Certificate[]
对象,其中我得到看起来像这样的链条:
[leaf certificate] - [intermediate certificate]
因此,Android设备上没有根证书。
你有什么想法如何从Android链中获取根证书?
预先感谢您。
感谢您的回答提取的代码。你有,为什么我会收到在iOS的情况下,根证书的任何解释,但在Android上不呢?我在这两个请求发送到相同的端点案例 – uerceg
假设服务器没有提供链中的根CA(您可以在ssllabs.com中查看它),iOS正在使用信任存储的匹配证书构建完整的认证链,而Android正在验证相同但仍是没有添加根证书在我看来,Android(和Java)应该提供这些信息 – pedrofb
是的,感谢你的信息,是有道理的,我试图覆盖'X509TrustManager',但仍然没有运气。你也许知道是否有安德尔的一种方式oid从设备获取根证书,用于验证链中的中间设备?(几乎可以获得iOS所返回的根目录,但可能从设备本身读取它) – uerceg