数字证书被“签名”是什么意思?

信息安全 加密 tls 证书 密钥管理
2021-08-18 02:27:23

当有人说某个特定的数字证书(如 SSL 证书)已“使用密钥签名”时,这意味着什么?这是否意味着证书只包含一个应该用于进一步消息交换的密钥?这是否意味着证书本身已加密并且只能使用该密钥解密?它是否暗示了别的东西?提前致谢。

3个回答

理想情况下,这意味着有人查看了证书并认为它是正确且合法的。一旦他们这样做了,他们想告诉人们“嘿,我已经验证了这个证书是好的。我相信它”。为此,他们使用他们的签名密钥来签署证书。

现在,当有人获得证书时,他们可以看到谁签署了证书。如果他们信任其中一位签名者,他们就可以信任证书本身。这是PKI信任网络的基础。

实际的签名可能取决于它是什么类型的证书。我认为这是一本有用的读物

数字证书由三部分组成:

  • 一个公钥。
  • 证书信息。(有关用户的“身份”信息,例如姓名、用户 ID 等。)
  • 一个或多个数字签名。

通常,“一个或多个数字签名”部分是通过列出一组证书的加密哈希来完成的。因此,当您要签署证书时,您将计算证书的哈希值,使用您的私人签名密钥对其进行加密,并将其添加到数字签名的累积列表中。

这是X.509 证书的结构:

    Certificate  ::=  SEQUENCE  {
        tbsCertificate       TBSCertificate,
        signatureAlgorithm   AlgorithmIdentifier,
        signatureValue       BIT STRING  }

   TBSCertificate  ::=  SEQUENCE  {
        version         [0]  EXPLICIT Version DEFAULT v1,
        serialNumber         CertificateSerialNumber,
        signature            AlgorithmIdentifier,
        issuer               Name,
        validity             Validity,
        subject              Name,
        subjectPublicKeyInfo SubjectPublicKeyInfo,
        issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
                             -- If present, version MUST be v2 or v3
        subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
                             -- If present, version MUST be v2 or v3
        extensions      [3]  EXPLICIT Extensions OPTIONAL
                             -- If present, version MUST be v3
        }

证书本身包含的数据是TBSCertificate一部分:它将公钥(subjectPublicKeyInfo)绑定到标识符(主题)和各种其他属性扩展)。

然后将其与签名组合以形成Certificate结构。签名算法规定了应该如何完成。

本质上,TBSCertificate计算(通常是 SHA-1)的摘要,然后使用签名者(X.509 术语中的发行者)的私钥进行签名。内容的最轻微修改TBSCertificate应该会使摘要发生变化,这反过来会使签名无效。

使用 RSA 密钥,使用私钥对摘要进行签名在数学上与使用公钥加密非常相似。但是,这在概念上并不相同,例如,DSA 没有这种互惠性。

其他类型证书的原理相同,但结构可能不同。考虑到 PGP 公钥实际上是证书,您可能也对这些问题感兴趣:

当有人说某个特定的数字证书(如 SSL 证书)已“使用密钥签名”时,这意味着什么?

这意味着拥有该密钥的实体已保证证书中信息的准确性,并将允许验证该保证的信息附加到证书。

这是否意味着证书只包含一个应该用于进一步消息交换的密钥?

不,证书仅证明身份。

这是否意味着证书本身已加密并且只能使用该密钥解密?

不。没有理由加密证书,它们只包含公共信息。

它是否暗示了别的东西?

这意味着该密钥的所有者已为证书中的信息提供担保。对于典型的 SSL 证书,证书中的信息是公钥和公用名之间的绑定。

例如,当您将浏览器指向https://www.amazon.com/亚马逊服务器时,会向您发送一个证书。此证书将特定的公钥绑定到名称www.amazon.com您的浏览器确认了三件事以知道它正在与真正的亚马逊对话:

  1. 服务器提供了一个有效的证书,并由它信任的密钥签名。

  2. 该证书绑定身份“www.amazon.com”。

  3. 服务器证明自己拥有证书对应的私钥。

所以证书签名的目的是将签名代理的可信度放在证书中的信息背后,从根本上说“这个人拥有这个密钥”。