【发布时间】:2015-11-14 19:28:15
【问题描述】:
我们遇到了一个奇怪的情况。在建立连接时,我们的应用程序会执行一系列安全检查。其中之一是检查链长是否正确。我们知道应该是3:Root、intermediate和server。
当我们使用 Android 应用程序连接到服务器时,我们得到的响应只有两个中间证书和服务器 - 没有根。但是,当我们对网络浏览器进行检查时,我们提出了一项关于 Android 5.0 的研究,我们看到了 3,而在 Android 4.3 上,我们看到了其中的两个。连接表单 iOS 生成 3 个证书。
是服务器还是安卓?我们可以做些什么来获得根证书?
编辑: 我们从浏览器下载证书(根证书和中间证书)并从中创建一个密钥库并将其放入应用程序资产中。然后在我们的 CustomTrustManager 中,我们将来自密钥库的证书与来自我们连接的服务器的证书进行比较。
基本上,我们的比较是基于证书指纹。问题是根证书不是来自服务器,无法比较它。
但我们提出了这个想法。
我们可以比较来自服务器的中间证书是由根证书签名的,根证书在应用程序中进行了编码。
我认为这已经足够安全了。
我们将只比较中间指纹。
【问题讨论】:
标签: android ssl certificate ssl-certificate