我正在学习网络安全,我有以下问题:
Java(和其他语言)应用程序和浏览器使用CA证书来验证证书。 但我认为出于安全原因,CA证书有一个到期日期。那么CA证书到期后会发生什么?我无法找到特别针对非网络环境的解决方案。
客户端证书(如果存在)由相关服务器签名并提供??
CA证书是自签名的。这意味着没有人可以操纵它。 但是,如果另一个人创建另一个具有相同通用名称CA证书的自签名证书?如何区分真实的?
我知道证书链是指证书Z由另一个证书X的私钥签名,该证书本身由另一个私钥/证书签名,依此类推,直到ROOT证书。 我的问题是:浏览器如何检查证书Z的有效性?服务器只传递证书Z,我不明白brosers如何找到其他链证书。 我认为,如果我得到链证书也不安全。
为什么浏览器会保存访问过的服务器的证书? 例如,我有很多证书存储在firefox和chrome中 谷歌一个。 Chrome表示谷歌证书是奇怪的,这很奇怪 不可信。证书检查算法的哪一部分 更快的保存证书?
答案 0 :(得分:1)
当CA证书过期时,验证过期CA签名的证书将失败 - 即使签名证书尚未过期。可以通过获取带有相同公钥(对于相同的私钥)和主题可分辨名称的新证书以及稍后的到期日期来续订CA证书。
由于根证书通常具有非常长的有效期,因此可以续订证书,其有效期与旧证书重叠。新证书可以通过浏览器或操作系统更新分发给客户,只要当前时间在其有效期内,它就可以用来验证签名。
客户端证书和服务器证书可以由不相关的CA签名。服务器配置将包括指示哪些CA证书可用于验证客户端证书。
这里不重要的是公用名,而是主题专有名称,其中通用名称(CN)是一个可能的组件。 (只有CN的SDN很常见,特别是对于网站而言)。
如果两个自签名证书具有相同的SDN 和公钥,则它们大致相同(模数有效期,扩展等)。由一方签署的任何证书都可以由另一方验证,反之亦然。但是如果没有与公钥对应的私钥,那么任何人都无法签名。由于没有人可以生成与您相同的私钥,并且假设您将私钥保密,除此之外没有人可以制作有用的CA证书。
某人可以制作具有相同SDN但不同密钥的CA证书。在这种情况下,一个签名不会被另一个签名,反之亦然。证书可以通过主题密钥标识符 X.509扩展中的不同公钥和不同信息清楚地区分,其中包含加密摘要或哈希< / em>的公钥。
服务器不仅要传递最终实体证书,还要传递任何中间证书,最多(但通常不包括)根证书。服务器软件将允许您将整个证书链配置为作为TLS握手的一部分发送给客户端。收到后,客户端重新组装并验证链,从根证书开始,该证书由链中第一个(即最顶层)证书中的主题密钥标识符扩展名标识。
证书是否是有效的CA(根或中间)取决于一些属性,其中最重要的是基本约束扩展中的cA
布尔值,以及扩展密钥用法扩展中的keyCertSign
位。验证证书链时会检查这些内容,以确保每个签名证书都是CA证书。公共CA不会向公众颁发CA证书,因此有些人无法轻易获得可用作证明google.com的有效中间人的证书。
浏览器通常不会(当然Firefox不会)自动保存访问过的服务器的服务器证书,但某些浏览器(包括Firefox)会缓存中间证书。 This blog post详细介绍了这种做法。
答案 1 :(得分:0)
我正在学习网络安全,我有以下问题:
- ... CA证书到期后会发生什么?我无法找到特别针对非网络环境的解决方案。
醇>
(a)他们重新签发,以及(b)由其签署的所有证书均无效。请注意,CA证书的有效期很长,而且他们签署的证书会更快到期。 CA将在签署证书时为您提供证书链。您应该在任何安装链的地方安装该链。 Java附带了一个预先构建的信任库,其中包含可识别的CA证书,该证书随每个Java版本一起更新。
- 客户端证书(如果存在)由相关服务器签名并提供??
醇>
不,它们由客户提供,并由客户选择的CA签名。服务器与它无关。可以使用相同的客户端证书向任何SSL服务器验证自身。
- CA证书是自签名的。这意味着没有人可以操纵它。 但是,如果另一个人创建另一个具有相同通用名称CA证书的自签名证书?如何区分真实的?
醇>
证书还包含与私钥隐式相关的公钥。伪造者无法访问CA的私钥,因此无法像CA那样有效地签署任何内容。
- 我知道证书链是指证书Z由另一个证书X的私钥签名,该证书本身由另一个私钥/证书签名,依此类推,直到ROOT证书。 我的问题是:浏览器如何检查证书Z的有效性?
醇>
它安装在一组受信任的CA证书中。
服务器只传递证书Z,我不了解浏览器如何找到其他链证书。
不,服务器通过整个证书链。
我认为,如果我得到链证书也不安全。
为什么?