您可以使用数字证书本身进行签名吗?

信息安全 证书 电子签名
2021-08-23 03:06:18

谷歌搜索我看到几个讲座说可以使用数字证书进行签名。我对此感到困惑,因为据我所知,可以仅使用私钥进行签名,而在签名过程中使用数字证书?

2个回答

只是一个不精确的语言问题,每个相关人员都应该理解。

您使用只有您拥有的私钥进行签名。不使用公钥,不使用证书。事实上,也许没有使用公钥的证书。验证者使用公钥验证签名,不使用证书。但是公钥只是一个数字(或两个数字)。处理裸号码很不方便。因此,公钥通常带有一些说明公钥用途的元数据。那是一张证书。

也许它只是说“juaninf 的公钥”并且是自签名的(使用与自身公钥匹配的私钥附加了一个签名)。

可能在工作的时候有你老板签名的纸条,上面写着“这是 juaninf 的公钥,我是 2019-06-23 聘请他为我工作的,我是 C 公司 D 部门的经理,这是一个C 公司 CEO 的签名证明了这一事实”。而大楼的自动门可以测试这一点。您的私钥在不可克隆的智能卡中。

如果您在浏览器中单击 URL 旁边的锁,您可以看到该站点的 TLS 证书。在证书中,您可以看到公钥。您可以看到证书,因此您拥有证书。但是您没有匹配的私钥。因此,您无法为证书中的公钥创建新签名。所以你不能对网站的其他访问者进行中间人攻击。要进行中间人攻击,您需要让私钥与证书中的公钥匹配,以签署 DH 密钥交换消息(或解密过时的 TLS 配置中的加密秘密)。

有时,在说“我有证书”或“我有证书和私钥”时要准确很重要。但通常情况下,需要什么是显而易见的。

ZT 的回答可能会添加一件事:混淆可能是由 Microsoft Windows(可能还有其他系统)中的密码学实现引起的。

在管理 UI 中,证书及其对应的私钥都通过管理控制台的“证书”管理单元进行管理。

在 .NET 框架中X509Certificate2,用于表示数字证书的类具有属性HasPrivateKeyPrivateKey. 后者的文档说“获取或设置表示与证书关联的私钥的 AsymmetricAlgorithm 对象”。但是,由于通常的约定是字段代表属于对象的某些东西,因此开发人员可能会假设私钥是证书的一部分,而不仅仅是与它相关的东西。

最后,作为文件的私钥很少单独处理,而是通常与公钥和证书一起打包到 .pfx 文件中。这些文件可能被称为“加密容器”或类似的名称,但是当您打开它们时,应用程序的标题是“证书导入向导”,因此人们只称它们为“证书”。

所有这些都让开发人员将证书视为一个包含公钥和(有时)私钥的实体。显然,这在技术上是错误的:证书仅与密钥相关联,但不包含它们。但是,我不得不承认,我已经使用数字加密和签名开发了 .NET 应用程序几年了,今天是我第一次了解到我对“证书”一词的理解是错误的。当我在与其他开发人员的会议中谈到使用证书来签署/解密某些东西时,我也没有得到纠正。