我正在尝试在我的应用程序上实现证书绑定。据我所知,有三种类型的钉扎:
基于我所说的,似乎推荐的方法是SPKI钉扎。
我的应用程序可以连接到多个服务器,基于用户在登录时输入的ip。这是我实施的想法,但我不确定它是否会奏效。
我将创建一个由CA签名的中级证书。那就创建我自己的公共私钥。然后,我的应用程序可以连接的每一个服务器都需要向我请求用我的私钥签署他们的证书。层次结构应该是RootCertificate(由CA自签名),然后是我的中间证书(由CA签名),然后是应用程序可以通过私钥签名的每个服务器的leafs证书。
在这个应用程序上,我会从我的中间证书中存储公钥的散列。在第一次连接到随机服务器时,应用程序将获得3个证书:用于服务器的证书、我的中间证书和根证书。在检查哈希时,会发现与我的公钥匹配。
你认为如何?这能否付诸实施?我明白什么不对劲了吗?这种方法容易受到mitm攻击吗?谢谢!
发布于 2021-10-21 11:16:14
我的应用程序可以连接到多个服务器,基于用户在登录时输入的ip。这是我实施的想法,但我不确定它是否会奏效。 我将创建一个由CA签名的中级证书。那就创建我自己的公共私钥。然后,我的应用程序可以连接的每一个服务器都需要向我请求用我的私钥签署他们的证书。层次结构应该是RootCertificate(由CA自签名),然后是我的中间证书(由CA签名),然后是应用程序可以通过私钥签名的每个服务器的leafs证书。 在这个应用程序上,我会从我的中间证书中存储公钥的散列。在第一次连接到随机服务器时,应用程序将获得3个证书:用于服务器的证书、我的中间证书和根证书。在检查哈希时,会发现与我的公钥匹配。
我将简化这种方法,只需针对每个后端服务器和移动证书钉扎发生器工具就可以帮助您提取多个域/ips的引脚,同时生成适合于安卓和iOS的固定配置。
让我们想象一下,您的移动应用程序需要与example.com、httpbin.org和google.com通信。
只需在Config选项卡中配置要锁定的域:

提交表单后,您将在“结果”选项卡中登陆,然后导航到Android选项卡:

在iOS标签上:

在每个配置下面,您都有关于如何将每个配置添加到您的移动项目中的说明,甚至还有一个指向使用PinTestAppfor安卓和iOS的一步步教程的链接。
将每个后端证书固定在每个后端证书上的优点是,现在可以让每个人用LetsEncrypt自动生成证书,该证书在更新之间保持公钥,因此不需要更改移动应用程序中的引脚,除非出现私钥折中。您可以替换LetsEncrypt,它允许您在维护相同公钥的同时旋转证书。
https://stackoverflow.com/questions/63009726
复制相似问题