【问题标题】:Should the trusted Root CA be a part of the certificate chain?受信任的根 CA 是否应该成为证书链的一部分?
【发布时间】:2016-04-28 23:12:32
【问题描述】:

我正在不同主机上的服务之间设置双向 SSL 通信。假设我有自己的 CA,称为 A。我的所有服务都通过集中式 jks 信任 A。现在假设我有由 A 签名的证书 B。当服务发送证书时,他们应该发送整个链 B - A,还是只发送 B?我相信两者都倾向于与大多数实现一起使用。

我试图在网上找到有关此的规范信息,但我一无所获。

感谢您的帮助

【问题讨论】:

标签: ssl ssl-certificate keystore jks


【解决方案1】:

根据tls - Validating an SSL certificate chain according to RFC 5280: Am I understanding this correctly? - Information Security Stack Exchange

服务器应该发送要使用的确切链;服务器 明确允许省略根 CA,仅此而已。

参考(RFC 5246 - TLS v1.2, sec. 7.4.2. - Server Certificate):

证书列表

这是一个证书序列(链)。发件人的 证书必须排在列表的首位。以下每份证书 必须直接证明它前面的那个。因为证书 验证要求根密钥独立分布, 指定根证书的自签名证书 权限可以从链中省略,假设 远程端必须已经拥有它才能验证它 任何情况。

【讨论】:

    【解决方案2】:

    受信任的根 CA 背后的理念是它是受信任的。您是否希望浏览器仅仅因为它包含根 CA 就信任服务器发送的任何内容?不!

    因此,根 CA 必须已经在客户端,并且必须在那里受到信任。它不应该被服务器包含在证书链中,但如果你这样做了,浏览器会直接忽略它。

    【讨论】:

    • 我做了一些实验:新建一个Root CA,从中派生一个SSL证书,然后配置apache的SSL设置,如果我不将Root CA证书附加到SSL证书文件,那么Chrome 不会让我访问该网站,如果我包含它,那么 Chrome 会给我一个安全警告并让我选择继续访问有风险的网站。关键是,对于非预置的根 CA,将根 CA 包含在 SSL 证书中将有助于不关心安全的用户,否则他们甚至无法访问网站。
    • @osexp2003:这不是根 CA 应该首先使用的方式。根 CA 的想法是它已被客户端信任,因此可用于验证信任链。在这种情况下,客户端已经拥有它。如果客户端只是信任服务器提供的任意根 CA,那么中间人攻击将是微不足道的——攻击者只需要使用自己的根 CA。如果您想帮助不关心安全性的用户,只需使用纯 HTTP - 而不是教用户他们可以忽略证书错误。
    • 我明白了。我只是想说,在现实世界中,当用户只想访问证书未由受信任的来源签署的网站时,网站必须在其证书链中包含这样一个不应该包含的根 ca 证书,否则,至少Chrome不会让用户访问该网站,甚至不会提供“忽略安全风险并继续”选项。
    猜你喜欢
    • 2017-04-21
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 2022-01-25
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多