首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >证书固定移动应用程序

证书固定移动应用程序
EN

Stack Overflow用户
提问于 2020-07-21 07:41:11
回答 1查看 535关注 0票数 1

我正在尝试在我的应用程序上实现证书绑定。据我所知,有三种类型的钉扎:

  • 证书钉扎;证书应该在应用程序中进行“硬编码”,并与来自服务器的证书进行比较。这有点糟糕,因为如果需要轮换证书,则需要对应用程序进行更新。
  • 公钥钉扎;从我的研究来看,这似乎是不可取的。
  • SubjectPublicKeyInfo(SPKI)固定;这是公钥的散列。这种方法的优点是,如果需要旋转证书,则新证书的公钥对于新证书可以保持不变,这样就不需要更新。

基于我所说的,似乎推荐的方法是SPKI钉扎。

我的应用程序可以连接到多个服务器,基于用户在登录时输入的ip。这是我实施的想法,但我不确定它是否会奏效。

我将创建一个由CA签名的中级证书。那就创建我自己的公共私钥。然后,我的应用程序可以连接的每一个服务器都需要向我请求用我的私钥签署他们的证书。层次结构应该是RootCertificate(由CA自签名),然后是我的中间证书(由CA签名),然后是应用程序可以通过私钥签名的每个服务器的leafs证书。

在这个应用程序上,我会从我的中间证书中存储公钥的散列。在第一次连接到随机服务器时,应用程序将获得3个证书:用于服务器的证书、我的中间证书和根证书。在检查哈希时,会发现与我的公钥匹配。

你认为如何?这能否付诸实施?我明白什么不对劲了吗?这种方法容易受到mitm攻击吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-10-21 11:16:14

我的应用程序可以连接到多个服务器,基于用户在登录时输入的ip。这是我实施的想法,但我不确定它是否会奏效。 我将创建一个由CA签名的中级证书。那就创建我自己的公共私钥。然后,我的应用程序可以连接的每一个服务器都需要向我请求用我的私钥签署他们的证书。层次结构应该是RootCertificate(由CA自签名),然后是我的中间证书(由CA签名),然后是应用程序可以通过私钥签名的每个服务器的leafs证书。 在这个应用程序上,我会从我的中间证书中存储公钥的散列。在第一次连接到随机服务器时,应用程序将获得3个证书:用于服务器的证书、我的中间证书和根证书。在检查哈希时,会发现与我的公钥匹配。

我将简化这种方法,只需针对每个后端服务器和移动证书钉扎发生器工具就可以帮助您提取多个域/ips的引脚,同时生成适合于安卓iOS的固定配置。

让我们想象一下,您的移动应用程序需要与example.comhttpbin.orggoogle.com通信。

只需在Config选项卡中配置要锁定的域:

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

在iOS标签上:

在每个配置下面,您都有关于如何将每个配置添加到您的移动项目中的说明,甚至还有一个指向使用PinTestAppfor安卓iOS的一步步教程的链接。

将每个后端证书固定在每个后端证书上的优点是,现在可以让每个人用LetsEncrypt自动生成证书,该证书在更新之间保持公钥,因此不需要更改移动应用程序中的引脚,除非出现私钥折中。您可以替换LetsEncrypt,它允许您在维护相同公钥的同时旋转证书。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63009726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档