我想了解证书固定和公钥是如何完成的。阅读不同的博客后,我对这个概念更加困惑,因此我添加了这个问题。我想知道 1.如何通过实例实现证书固定
2.如何通过实例实现公钥锁定
证书或公钥锁定只是异常(exception)连接证书信息的“白名单”,以便您可以确认您连接的对象是您希望连接的对象。基本上它可以在中间情况下检测到人。
检查 out作为一个很好的总体概述。
证书固定和公钥固定之间的唯一区别是您在白名单中检查的数据。由于证书包含公钥,您可以将证书视为正在检查的数据的超集。您检查的内容将决定您希望检测次要证书“更改”的严格程度。
如上链接所述,还有许多方法可以实现固定。这只是取决于您决定检查什么以及如何将其存储在白名单中。既然你在谈论 Android,上面的链接提到了 Android 推荐的方式,所以你可能想研究一下。
您可能喜欢看的另一个实现是 Mozilla pining implementation它使用以十六进制形式存储的公钥的 sha256 哈希白名单固定公钥。
更新:正如@Robert 所提到的,除了标准的证书链检查之外,还应该进行证书固定。它不应取代标准证书链检查,特别是在固定在根/中间证书级别时。
固定根或中间固定可以降低其安全性,但对证书更改更具弹性。此类设置的使用取决于您使用证书固定的原因以及您是否可以轻松更新客户端白名单。这些是您根据具体情况做出的安全权衡。
我是一名优秀的程序员,十分优秀!