场景:
我的理解(如果我还是错了,请纠正我):
使用公钥固定,以便我们可以检查我们发布服务器的证书的公钥是否已更改。 source
如果证书的公钥SHA是我们在应用程序中“固定”的证书,则该证书有效。要检查公共密钥,首先它将使用公共密钥解密签名,并确保该签名的数据中也包含相同的公共密钥。
当Leaf证书已过期但与有效的“固定”公钥SHA相对应时,将检查证书链以查看它们是否有效以及其中之一是否有效,然后接受该证书并连接已建立。
当我获得的Leaf证书具有无效的公共密钥但未过期时,则意味着我从可能是攻击者的人那里获得了错误的证书。
问题:
如果攻击者破坏了客户端并安装了自己的受信任CA,然后在客户端上执行MITM来通过出示由其签名的伪造证书来拦截所有通信,则公钥固定是否对安全性有任何帮助?他已在客户端设备上安装了CA。
直接证书固定VS公钥固定在这里有何不同?
在上述问题中使用自签名证书的含义是什么。
请帮助我尽可能详细地了解这一点...
答案 0 :(得分:1)
当Leaf证书已过期但与有效的“固定”公钥SHA对应时,将检查证书链以查看它们是否有效,如果其中一个有效,则接受证书且连接为建立。
不。不接受过期的证书。固定不会覆盖TLS的基本原理,但会对其进行增强以减少接受的证书数量。
如果攻击者破坏了客户端并安装了自己的受信任CA,然后在客户端上执行MITM来通过提出由自己拥有的CA签名的伪造证书来拦截所有通信,则公钥固定是否对安全性有任何帮助?安装在客户端设备上。
对于浏览器,手动安装的受信任CA不受固定要求的约束。对我来说,这是固定的根本缺陷。坦白地说,一旦您有权在计算机上安装根证书,那么游戏就结束了。无论如何,此例外是使病毒扫描程序,公司代理和其他拦截代理正常工作所必需的-否则,虽然隐藏在我的代理中的任何一个削弱了HPKP(HTTP公钥锁定)功能,但无法访问任何被锁定的站点。 / p>
对于应用程序(您的用例),固定有助于防止MITM攻击。
直接证书固定VS公钥固定在这里有何不同?
不明白吗?当您固定直接证书时,基本上就是固定该证书的公钥(实际上也链接了证书所链接的私钥的SHA)。
这意味着您可以从同一私钥重新发行证书(恕我直言,这是不好的做法),而不必更新密码。
您还可以从中间甚至根公共密钥固定。这意味着您可以让您的CA重新颁发证书,而不必再次更新图钉。那当然可以将您绑定到该CA,但至少不允许某些随机CA为您的站点颁发证书。
以上问题中使用自签名证书的含义是什么。
对于浏览器,固定基本上不能与自签名证书一起使用。因为它要么无法被浏览器识别(因此无法进行固定),要么是通过手动安装发行者来信任-在此点上,根据以上几点,固定将被忽略。
对于应用程序(同样适用于您的用例),我知道可以固定自签名证书。尽管这取决于您使用的HTTP库以及如何配置。
固定证书本身的缺点(如果是单个泄漏自签名证书,则可能是这样做的唯一方法)是重新颁发证书会使旧的销无效(除非您重复使用相同的证书)私钥,但是如果重新发布原因是由于密钥泄露而导致的,则可能无法实现)。因此,如果您的应用发出了HTTP调用以检查是否有新版本或类似版本,则如果重新颁发证书并且尚未下载新版本的应用,则该调用可能会失败。
几乎所有的浏览器都不赞成HPKP,因为与收益相比,HPKP的风险很高,并且由于钉扎而导致破损的情况不胜枚举。参见维基百科:https://en.m.wikipedia.org/wiki/HTTP_Public_Key_Pinning。通过Certificate Transparency监视错误签发的证书被认为是更安全的选择。
固定在移动应用程序领域似乎仍然很流行,因为您可以更好地控制应用程序,并在出现问题时可以重新发布新版本。但这仍然是复杂且冒险的。