根据XML 签名规范(3.2.2“签名验证”),可以对KeyInfo元素进行签名:
“请注意,KeyInfo(或其某些转换版本)可以通过 Reference 元素进行签名。”
在这里,我们可以看到一个带有这种签名的 xml 示例。
是否有任何理由自行签署证书?
它消除了哪些安全风险?
看看这个关于signingCertificate
XAdES 中属性的澄清部分。ETSI XAdES 建立在 XMLDSig 之上,以建立长期有效的高级签名的要求
signingCertificate
ds:KeyInfo
当不存在或不包含用于签名的证书时是强制性的,并且用于相同的目的
7.2.2 SigningCertificate 元素
在许多现实生活环境中,用户将能够从不同的 CA 甚至从同一个 CA 获得包含不同名称的相同公钥的不同证书。主要优点是用户可以将相同的私钥用于不同的目的。当使用智能卡保护私钥时,多次使用私钥是一个优势,因为智能卡的存储总是有限的。当涉及多个 CA 时,每个不同的证书可能包含不同的身份,例如作为国民或作为公司的雇员。因此,当私钥用于各种目的时,需要证书来阐明在生成签名时使用私钥的上下文。
当前的许多方案只是在签名数据后添加证书,因此容易受到各种替代攻击。替代攻击的一个示例是“坏”CA,它会使用其他人的公钥向某人颁发证书。如果来自签名者的证书只是简单地附加到签名中,因此不受签名保护,那么任何人都可以用另一个证书替换一个证书,并且该消息似乎是由其他人签名的。为了对抗这种攻击,证书的标识符必须受到签名者的数字签名的保护。