security - 证书 SSL 问题

标签 security ssl browser https certificate

我正在学习网络安全,我有以下问题:

  1. Java(和其他语言)应用程序和浏览器使用 CA 证书来验证证书。 但我想出于安全原因,CA 证书有一个到期日期。那么当 CA 证书过期时会发生什么?我找不到特别针对非网络环境的解决方案。

  2. 客户端证书(如果存在)由相关服务器签名和提供?

  3. CA 证书是自签名的。这意味着没有人可以操纵它。 但是,如果另一个人创建另一个具有相同公用名称的 CA 证书的自签名证书呢?怎么辨别真假?

  4. 我理解证书链是指证书 Z 由另一个证书 X 的私钥签名,而另一个证书 X 本身由另一个私钥/证书签名,依此类推,直到 ROOT 证书。 我的问题是:浏览器如何检查证书 Z 的有效性?服务器只传递了证书Z,我不明白兄弟们是如何找到其他链证书的。 我还认为我如何获得链证书并不安全。

  5. 为什么浏览器会保存访问服务器的证书? 例如,我在 firefox 和 chrome 中都存储了很多证书 谷歌一个。 chrome 将 google 证书指示为 不受信任。他们制作的证书检查算法的哪一部分 更快地保存证书?

最佳答案

  1. 当 CA 证书过期时,由过期 CA 签署的证书验证将失败 - 即使签署的证书尚未过期。 CA 证书可以通过获取带有相同公钥(用于相同私钥)和主体可分辨名称以及较晚到期日期的新证书来续订。 p>

    由于根证书的有效期通常很长,因此可以续订与旧证书重叠有效期的证书。新证书可以通过浏览器或操作系统更新分发给客户端,只要当前时间在有效期内,就可以用来验证签名。

  2. 客户端证书和服务器证书可以由不相关的 CA 签名。服务器配置将包括指示哪些 CA 证书可用于验证客户端证书。

  3. 这里重要的不是通用名,而是主题专有名称,其中通用名 (CN) 是一个可能的组成部分。 (虽然只有 CN 的 SDN 很常见,尤其是对于网站而言)。

    如果两个自签名证书具有相同的 SDN 和公钥,则它们大致等效(取模有效期、扩展等)。由一个人签署的任何证书都可以由另一个人验证,反之亦然。但是没有与公钥相对应的私钥,任何人都无法进行签名。由于没有人可以生成与您相​​同的私钥,并且假设您将私钥保密,那么除了您之外没有人可以制作有用的 CA 证书。

    有人可以使用相同的 SDN 但不同的 key 制作 CA 证书。在这种情况下,一个人所做的签名将无法被另一个人验证,反之亦然。证书将通过不同的公钥和主题 key 标识符 X.509 扩展中的不同信息清晰地区分,其中包含加密摘要哈希 的公钥。

  4. 服务器不仅必须通过终端实体证书,还必须通过任何中间证书,直至(但通常不包括)根证书。服务器软件将允许您配置整个证书链作为 TLS 握手的一部分发送给客户端。收到后,客户端重新组装并验证链,从根证书开始,根证书由链中第一个(即最顶层)证书中的主题 key 标识符扩展标识。

    证书是否是有效的 CA(根或中介)取决于一些属性,其中最重要的是 Basic Constraints 扩展中的 cA bool 值,以及 Extended Key Usage 扩展中的 keyCertSign 位。在验证证书链时会检查这些以确保每个签名证书都是 CA 证书。公共(public) CA 不会向公众颁发 CA 证书,因此有人无法轻易获得可用作有效中介来证明 google.com 等的证书。

  5. 浏览器通常不会(当然 Firefox 不会)自动保存所访问服务器的服务器证书,但某些浏览器(包括 Firefox)会缓存中间证书。 This blog post详细介绍了这种做法。

关于security - 证书 SSL 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29268090/

相关文章:

ssl - GOlang/https : timeout waiting for client preface

symfony - 来自 Symfony2 Controller 的 SSL 错误

javascript - 如何监控浏览器中发出的所有自定义事件?

ssl - Worklight 6.2 SSL 配置

angular - 如何修复类型 'permissions' 上不存在属性 'Navigator' ?

browser - gmail 浏览器客户端如何检测互联网/服务器断开连接(速度和可扩展性)

android - 在 Android 上设置 Charles 代理时互联网连接丢失

c++ - 反黑客游戏 - 最佳实践、建议

java - Java 中类似 chroot 的环境?

ios - HTTPS POST 安全级别