【问题标题】:SSL: Understanding self-signed-certificatesSSL:了解自签名证书
【发布时间】:2015-03-11 20:02:09
【问题描述】:

我想知道通常如何在 SSL 连接建立中检查自签名证书。

让我们看看self-signed certificates

  • 客户端和服务器提供 self-signed certificate 及其私钥(例如使用 OpenSSL 创建)

  • server收到来自client"ClientHello"消息时,他正在向客户端传输他的证书。

  • ServerHelloDone消息发送给客户端,客户端需要验证证书。

客户端在收到服务器证书时,验证这个证书的步骤是什么? 我知道通常不应该使用自签名证书,事实上没有第三方实例(CA) 可供检查。

客户端是直接接受服务器证书而没有任何进一步的步骤,还是客户端在建立连接之前已经提供了服务器“根”证书?

【问题讨论】:

  • 您的最后一个子问题在自签名证书的上下文中没有真正意义(不确定您将谈论什么“根”)。另外,CertificateVerify 消息仅用于客户端证书认证,与验证服务器证书无关。
  • 这是一个如何验证自签名证书的想法。当我谈论服务器“根”证书时,我将其视为 CA 证书的根证书的替代品(在非自签名证书环境中)。很抱歉关于CertificateVerify 消息的错误;-) 并感谢您的建议。
  • 这个问题似乎离题了,因为它与编程或开发无关。也许你应该问Super UserInformation Security Stack Exchange
  • 感谢您的参考!!!信息安全堆栈交换似乎是一个完美的地方:)

标签: ssl openssl certificate x509


【解决方案1】:

客户端在收到服务器证书时,验证这个证书的步骤是什么?

客户端执行证书链接引擎来验证证书。重要的检查是:

1) 证书签名

2) 证书主题。主题字段中的 CN 属性(或主题备用名称中的适当名称)必须与输入的 URL 匹配。例如,您连接到 www.example.com,则此名称必须列在主题和/或 SAN 扩展中。

3) 证书有效期

4) 证书吊销

5) 直到受信任根的证书链(以自签名形式呈现)

6) RFC5280 中定义的其他检查(包括但不限于:增强的密钥使用、策略约束、名称约束等)。

在自签名证书的情况下,证书链由一个元素组成——服务器证书。在这种情况下,客户端仅跳过第 4 步,因为无法撤销自签名证书。并且这个自签名证书必须被客户端明确信任为受信任的根证书,因为所有自签名证书都是根证书。

【讨论】:

  • 那么客户端总是提供服务器的自签名证书来代替ca证书?
  • 通常,终端实体(比如服务器)和根证书是单独的证书。但是,RFC5280 并不限制同时使用单个证书作为最终实体和根证书,因为它们(服务器验证和证书链验证)是独立的例程。自签名证书是正常情况。
  • 就是这样!感谢您参考 RFC5280。
猜你喜欢
  • 2012-11-01
  • 2015-05-12
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
  • 2020-10-25
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多