我正在尝试使用Java签署XML文档,我正在跟随此tutorial。我试图使用我的私钥来签署文档,但是当我查看API时,它说 KeyValue仅将PublicKey作为参数。在本教程中,它还让我使用私钥对DOMSignContext进行签名,然后使用公钥对XMLSignature进行签名。
DOMSignContext dsc = new DOMSignContext(kp.getPrivate(), doc.getDocumentElement());
KeyValue kv = kif.newKeyValue(kp.getPublic());
KeyInfo ki = kif.newKeyInfo(Collections.singletonList(kv));
XMLSignature signature = fac.newXMLSignature(si, ki);
我认为私钥的重点是让人们信任你?为什么你需要公钥?有人可以在这里解释一下这里的细节吗?
答案 0 :(得分:1)
通常,当有人想要验证/解密用私钥加密的内容时,必须知道相关的公钥(这是公钥/非对称加密的全部要点)。
在XMLSignature
上下文中,想要使用XMLSignature验证文档的人需要知道要使用的公钥;因此,为方便起见,公钥可以包含在XMLSignature结构中。
成功验证XMLSignature意味着可以相信自签名创建以来签名的数据未被修改。如果已知公钥与特定方相关联,则可以信任该方创建了签名。
如教程中所述,您仍需要使用以下方式“签名”签名:
signature.sign(dsc);