首页 > 解决方案 > Windows或浏览器是否保存X509证书的签名?

问题描述

Windows 有类X509Certificate2X509Certificate证书数据。但是没有人提供原始签名,只有指纹。他们提供了该字段RawData,但它只是证书本身,因为我在它上面运行了一个哈希,它与 X509Certificate 提供的哈希匹配。

Windows 有工具可以将每个证书保存到不同格式的文件中,但似乎没有一个包含签名。Firefox 有自己的实用程序来显示证书,它显示签名,但它似乎是一个错误,因为签名与RawData返回的最后一个字节匹配X509Certificate,这RawData是没有签名的原始证书。

我尝试了来自 HTTPS 会话的 CA 证书和服务器证书,但它们都不包含签名。似乎 Windows 验证了签名,将其转换为指纹,然后扔掉了签名。为什么?

标签: c#firefoxcryptographyx509certificate

解决方案


TL;DR:是的,签名被保存,即使它没有显示创建信任链需要签名。签名由大量二进制数据组成,因此向用户展示它并不是那么有用。


你很困惑。证书的最后一部分签名值,正如您在 X.509 规范中看到的那样。

显示的证书上的散列不是用于生成签名的散列。它是对构成证书的所有二进制数据(包括签名)的单独散列,而证书中的散列仅在证书的TBSCertificate“待签名”部分上。

此外,所有证书的指纹通常是使用一种特定的哈希算法计算的。这使得比较指纹变得容易。用于签名的哈希算法在证书本身中指定 - 统称为signatureAlgorithm. 虽然它可能是与指纹相同的算法,但它通常是一种更现代的哈希函数,不允许冲突。指纹通常仍然是 SHA-1 或 MD-5,它们的安全性较低,但更容易让人摸索。


推荐阅读