我们有一个奇怪的情况。在设置连接时,我们的应用程序会执行一系列安全检查。其中之一是检查链长是否正确。我们知道它应该是3:Root,intermediate和server。
当我们使用Android应用程序连接到服务器时,我们得到的响应只有两个中间证书和服务器 - 没有root。但是当我们执行检查思维网络浏览器时我们得到了Android 5.0的研究,我们看到3,在Android 4.3上我们看到其中两个。连接表格iOS会产生3个证书。
是服务器还是Android?我们还可以做什么来获得根证书?
编辑: 我们从浏览器下载证书(根和中间)并从中创建密钥库并将其放入应用程序资产中。然后在我们的CustomTrustManager中,我们将来自密钥库的证书与来自我们连接的服务器的证书进行比较。
基本上我们的比较基于证书指纹。问题是根证书不是来自服务器,也没有能力进行比较。
但我们提出了这个想法。
我们可以比较来自服务器的中间文件是由在应用程序中编码的根证书签名的。
我认为这是足够安全的。
我们只会比较中间指纹。
答案 0 :(得分:1)
我不知道你是如何准确地进行检查的,但总的来说:
这意味着您看到的链长取决于很多因素: