当有人说某个特定的数字证书(如 SSL 证书)已“使用密钥签名”时,这意味着什么?这是否意味着证书只包含一个应该用于进一步消息交换的密钥?这是否意味着证书本身已加密并且只能使用该密钥解密?它是否暗示了别的东西?提前致谢。
数字证书被“签名”是什么意思?
理想情况下,这意味着有人查看了证书并认为它是正确且合法的。一旦他们这样做了,他们想告诉人们“嘿,我已经验证了这个证书是好的。我相信它”。为此,他们使用他们的签名密钥来签署证书。
现在,当有人获得证书时,他们可以看到谁签署了证书。如果他们信任其中一位签名者,他们就可以信任证书本身。这是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
。您的浏览器确认了三件事以知道它正在与真正的亚马逊对话:
服务器提供了一个有效的证书,并由它信任的密钥签名。
该证书绑定身份“www.amazon.com”。
服务器证明自己拥有证书对应的私钥。
所以证书签名的目的是将签名代理的可信度放在证书中的信息背后,从根本上说“这个人拥有这个密钥”。