[英]Android-Certificate pinning vs public key pinning
我试图了解证书固定和公钥是如何完成的。 阅读不同的博客后,我对这个概念更加困惑,因此我添加了这个问题。我想知道 1.How to implement certificate pinning with an example
2.如何通过实例实现公钥固定
证书或公钥密钥只是例外连接证书信息的“白名单”,因此您可以确认您连接的是您希望连接的人。 基本上它可以在中间情况下检测到人。
检查出来是一个很好的概述。
证书固定和公钥固定之间的唯一区别是您在白名单中检查的数据。 由于证书包含公钥,因此您可以将证书视为正在检查的数据的超集。 您检查的内容将决定您希望检测次要证书“更改”的严格程度。
如上面的链接所述,还有许多实现固定的方法。 这只取决于您决定检查的内容以及如何将其存储在白名单中。 由于您正在谈论Android,上面的链接提到了Android推荐的方式,因此您可能希望调查一下。
您可能希望看到的另一个实现是Mozilla pining实现 ,它使用以十六进制形式存储的公钥的sha256哈希的白名单来固定公钥。
更新:如@Robert所述,除标准证书链检查外,还应进行证书锁定。 它不应取代标准证书链检查,特别是在根/中间证书级别进行处理时。
固定根或中间压缩会降低安全性,但对证书更改更具弹性。 此类设置的使用取决于您使用证书固定的原因以及是否可以轻松更新客户端白名单。 这些是您根据具体情况进行的安全权衡。
1.如何通过一个例子实现证书绑定
在我看来,您不应该遵循这种方法,因为您需要在移动应用程序二进制文件中对证书进行硬编码,因此要求每次更新它们时都需要发布一个新版本的移动设备,并且需要一些支持证书和将需要强制所有用户升级。 在所有用户升级后,您将需要发布另一个版本的移动应用程序以删除旧证书。
2.如何通过实例实现公钥固定
这里最好的方法是使用移动证书锁定生成器在线工具,该工具将创建适当的网络安全配置文件以添加到 Android 应用程序。
我建议您阅读我在另一个问题中给出的这个答案中的Preventing MitM Attacks
部分,您将在其中学习如何实现静态证书固定以及如何绕过它:
在移动应用程序中实现静态证书固定的最简单快捷的方法是使用 [移动证书固定生成器](移动证书固定生成器),它接受您想要固定的域列表并为您生成正确的在 Android 和 iOS 上使用的证书固定配置。
给它一个要固定的域列表:
该工具会为您生成 Android 配置:
该工具甚至作为如何将配置添加到您的移动应用程序的说明,您可以在证书固定配置框下方找到。 他们还提供了一个适用于Android和iOS 的实例 Pin 测试应用程序,这是一个分步教程。
这种方法不需要每次使用相同的公钥更新证书时都发布新的移动应用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.