我对SSL和证书的功能很肤浅。最近,我看到了一些有关证书固定的讨论,但没有定义。 DDG搜索没有发现任何有用的信息。什么是证书固定?

评论

Wikipedia中有相当简洁的证书固定描述。有关更详细的描述,请参见IETF Web安全(websec)工作组的HTTP规范的公钥固定扩展(当前是Internet草案,但可能很快会成为RFC)。

仅供参考:此问题链接自register.co.uk/2015/03/24/google_ssl_cnnic

我是基于HTTP的公钥固定RFC的合著者。这里的答案在某些方面不准确(例如,PKP与STS是分开的)。查看我关于主题noncombatant.org/2015/05/01/about-http-public-key-pinning的博客文章,或阅读RFC本身tools.ietf.org/html/rfc7469。

#1 楼

通常,通过检查签名层次来验证证书。 MyCertIntermediateCert签名,RootCert由q4312079q签名,并且RootCert列在我的计算机的“信任证书”存储中。也许只信任由该证书签名的证书,而忽略了所有其他可能是信任锚的根CA。它通常也称为“密钥固定”,因为它实际上是保存的公共密钥哈希值。站点所有者经常对其进行错误配置,并且如果站点受到破坏,攻击者可能会恶意地锁定站点所有者无法控制的证书。 Key Pinning在2017年已弃用,并于2019年11月从Chrome和Firefox中完全删除。IE和Safari从未支持它。

推荐的替代方法是使用Expect-CT标头,告诉浏览器要求证书显示在“证书透明性”日志中。

评论


好的答案,但这还取决于浏览器。 Google的Chrome浏览器会固定Google网站的证书,因此在您的示例中,Chrome浏览器将仅信任特定的google.com证书(已知为正确的证书)(或由Google Internet Authority签名的证书)。

– KeithS
13年2月5日在19:58

@KeithS的原理与浏览器无关。 Google使用稍微不同的机制(公钥哈希而不是证书哈希)来锁定它知道的证书,但是它仍然足够接近,因此称其为“锁定”仍然是正确的。

– tylerl
13年2月5日在21:52

那怎么办呢?证书固定,我的意思是

–user93353
13年4月28日在12:19

@JoshvonSchaumburg当在本地安装有问题的证书(未链接到根存储证书)时,Chrome不会进行固定检查。这是故意的。这个想法是,如果您是本地计算机的所有者,那么您的决定应该是最终决定,Chrome不应尝试规避您的操作。我认为,过去曾有一些关于以视觉方式表明该证书是本地信任而不是全球信任的消息,目前为止还没有实现。

– tylerl
2015年5月3日在22:24

您的帖子混淆了HPTS的HSTS。 HSTS仅确保使用HTTPS。证书固定是HPKP的工作。

–user2428118
17年4月25日在8:08

#2 楼

模棱两可,但是它指的是SSL证书链验证中的问题的解决方案。本质上,对SSL的信任可以归结为根证书,即系统信任的证书是真实的。那些随操作系统或浏览器一起提供。 TACK或公共密钥固定扩展(显然是被chrome称为cert固定)允许服务器的管理员将证书颁发机构(CA)的公共密钥签名“固定”到证书,由客户端验证(通过SSL传递延期)。如果CA证书的密钥在检索证书链时有所不同,则CA证书很可能受到了损害。 CA证书。这样可以减轻CA证书被泄露的风险,但是如果证书手动失效,则会强制您更新证书。

#3 楼

SSL服务器证书来自X.509世界。客户端通过验证来自证书颁发机构的许多加密签名来验证服务器证书的有效性。该方案的优点在于它是无状态的:给定的服务器可以每五分钟更改一次证书,并且仍然可以与客户端一起使用。

有人认为,支持快速旋转的证书是一种太棒了,但是没用,因为实际上给定的服务器每年更改一次证书;的确,尽早进行证书转换表明某些渔业活动正在进行。证书固定是服务器声明这种情况在正常情况下不应该发生的一种方式,并且如果发生意外的证书切换,客户端应该扬眉吐气。这是协议扩展,建议但尚未得到广泛支持。实际上,似乎有一些相对相似的,相互竞争的提议。融合和证书固定提案都围绕着相同的核心思想,即在客户端(或至少在某个地方)具有某种状态,并在证书更改得太频繁或过早时触发安全警告。这些提议中的任何一个是否会被广泛接受(即将由IE,Firefox,Chrome和Safari以兼容的方式实现,并且将由大多数SSL服务器系统管理员使用)。

评论


我声称融合(或透视图)不是协议扩展,而是一条侧面通道,用于验证从全球不同位置查看主机是否正在使用同一证书,并且这种情况已经存在了一段时间。与其他措施的核心区别在于,与其他证书固定方法不同,主机不能影响此验证。

– Mikko Rantalainen
13年8月29日在5:55

我知道这不是选择的答案,但对我来说,这是我能理解的解释。谢谢汤姆。

– Sizons
17年7月3日在8:40

借用Sizons,Tom表达简洁明了。这是有关实现固定的MDN文档,这似乎是当今的标准(HPKP)。

– Anton Strogonoff
18年8月7日在12:07



#4 楼

通常,HTTPS连接中发生的情况是,客户端从其通过https与之通信的SSL兼容服务器请求SSL证书。服务器将从其密钥库中提供证书。客户端收到此证书后,它将根据


主机名是否与请求的主机名相同来验证其凭据。信任存储]

现在,如果代理已建立连接,并且您可以使设备信任您的(恶意)根CA证书,则可以拦截安全连接。这本质上是中间人攻击。现在,这就是SSL固定的情况,它可能会增加中间人攻击的额外安全层-

应用程序会将已知的服务器证书与自身捆绑在一起。当应用尝试与服务器建立安全连接时,它会使用捆绑的证书来验证服务器收到的证书。因此,即使操作系统针对(可能是恶意的)根CA验证了接收到的证书链,该应用程序也会拒绝显示网络错误的连接。固定在Android Apps中。在此类应用程序中,很容易实现SSL固定,因为该应用程序已经知道它将要连接的服务器(主机名)。但是,可能难以在浏览器中实现相同的功能。我认为chrome浏览器已经实现了此功能。

我还编写了一个示例代码,演示了Android中的证书固定。您可以在github上找到它。您还可以在playstore上找到相同的应用。

更多信息:


http://nickfishman.com/post/50557873036/reverse-engineering-native -apps-by-intercepting-network
http://blog.lumberlabs.com/2012/04/why-app-developers-should-care-about.html


评论


FWIW证书固定存在一个问题:1.它使调试变得困难。因为您无法将其连接到Charles,除非您在调试期间将其禁用。2.您的证书最终将过期。

–蜂蜜
19年8月28日在21:31

#5 楼

证书锁定允许绕过标准证书颁发机构链,以减轻将有效证书颁发给犯罪分子的风险。

寻求新解决方案的动机...

SSL / TLS证书由其他证书签名。当在此签名链的某个位置找到可信实体时,浏览器通常会认为证书有效。受信任实体的签名来自操作系统和浏览器的基本安装。它是大约100个实体的嵌入式列表。

如果某个受信任的证书颁发机构遭到破坏,或者该证书颁发机构是欺诈行为的受害者,则他们可以向犯罪分子颁发有效证书。犯罪分子会以您的名义拥有完善的SSL / TLS证书。犯罪分子将能够进行成功可信的“中间人”攻击。用户将在您的网站上看到有效的证书信息。

另外,说服用户安装新的受信任证书颁发机构也不难。例如,在巴西,主流浏览器无法识别官方证书颁发机构,因此每个人都必须安装其他证书颁发机构。浏览器对此非常擅长:仅单击链接并回答是。为了达到这种可用性,我相信这是全球范围内的常见任务。

不能完全信任证书颁发机构。获得证书的过程绝不是安全的。我已经在一家公司买了一个,只花了一点钱。当然总比没有好。但是需要改进。

什么固定? />
“在接下来的N天内,secure.example.com网站将使用证书CECECECE。在此期间,即使证书颁发机构声称该证书对本网站有效,也不会接受其他证书。 /100.200.100.200/callbacks/warn_pinning.php”。

固定解决了问题吗?

没有解决证书颁发机构证书签名过程的弱点。但是,要最大限度地减少犯罪分子在中间袭击中与男人相处的机会。只有让用户首次访问该网站,该攻击才会起作用。

它类似于SSH安全性。首次访问时,将保存服务器密钥的签名。如果将来访问该标识不匹配,则系统将生成警告。该警告非常重要,因为只有在您进行真正的更改时才会发生。

对于大公司而言,最好的办法是通过客户投诉通知某人已经以犯罪者的名义发布了真实的TLS / SSL证书。据我了解,固定机制是Google提出的。

应用程序级固定

固定也可以在浏览器外部通过在应用程序中编译真实证书指纹来进行。

评论


我猜想在DNS中毒和类似情况下,攻击者更改了域名的IP,证书固定也会有所帮助(假设您以前访问过该站点)。

– SteenSchütt
16-10-16在6:26

好问题。在加密连接上会。但是我不知道固定站点是否会阻止未加密的连接正常工作。否则,攻击者仍然可以使用未加密的连接进行可信的攻击。如果不是仅仅是时间问题。不允许为固定的站点进行未加密的连接完全没有意义。

–卢卡斯
16-10-17在11:42

#6 楼

我认为,对Web用户进行MITM sslstrip攻击时,保留浏览器客户端的SSL证书只是HSTS的实现

评论


证书固定是不同的。目前,HSTS没有提供任何方法来固定到单个证书。取而代之的是,HSTS是一个布尔值,它使网站可以说“请只使用SSL”(但不能让网站限制于单个证书)。证书固定是一种扩展/不同的机制。

– D.W.
13年6月27日在22:03