我们有一个服务,接收大量签名的 XML 文档,其中一些是使用自签名证书签名的,一些是由受信任的证书颁发机构签名的。
确保用于签署 XML 文档的证书位于我们信任的证书列表中的最佳方法是什么?
今天,我们将证书指纹与已接受的证书指纹列表进行匹配。
我们能相信指纹是独一无二的吗?或者它有可能被伪造吗?
解决这个问题的最佳方法是什么?(我们不能让每个发送签名的 xml 文档的人都使用来自受信任的证书颁发机构的证书)
答案1
如果您使用标准 XML 签名语法,则可选的 KeyInfo 可能携带要使用的实际证书。
您应该使用 KeyInfo 中的证书指纹与已接受证书列表进行匹配,然后验证实际签名来自您自己的受信任证书库的该证书的副本如果用于签署文件的实际证书不同,则验证步骤将失败,该文件应被拒绝,并且希望有人进一步调查。
证书指纹应该足够复杂,这样偶然出现两个具有相同指纹的证书的可能性就可以忽略不计。但即使发生了这种情况(可能是恶意的),也只会导致为签名验证过程选择错误的证书,这肯定会导致验证失败。
但如果你要验证文件使用文件本身附带的证书然后检查证书指纹是否与某个受信任的证书匹配,您就可以做错了:您实际上是使用受信任证书的指纹作为密码。