Java中使用XMLSignature API为XML文档添加数字签名需严格遵循W3C规范,核心步骤包括:准备PKCS#12密钥对、构造SignedInfo指定SHA-256/RSA-SHA256等算法、设置Exclusive规范化、插入ds:Signature节点并签名,最后用DOMValidateContext验证。

Java中使用XMLSignature API为XML文档添加数字签名,核心是通过javax.xml.crypto.dsig包中的类构建签名对象、选择签名算法、引用待签名数据,并用私钥完成签名。整个过程需严格遵循W3C XML Signature规范(如http://www.w3.org/2000/09/xmldsig#),否则生成的签名可能无法被其他系统(如SAML服务、WS-Security网关)正确验证。
签名前必须有有效的密钥对。推荐使用PKCS#12格式的密钥库(.p12或.pfx),它同时包含私钥和对应证书链:
keytool -genkeypair生成,或用OpenSSL导出已有密钥KeyStore读取,通过别名获取PrivateKey和X509Certificate
SignedInfo是签名的核心元数据,定义了摘要算法、签名算法和引用规则:
SHA-256(对应URI http://www.w3.org/2001/04/xmlenc#sha256)RSA-SHA256(URI http://www.w3.org/2001/04/xmldsig-more#rsa-sha256)或ECDSA-SHA256
Reference需设置Transforms(如CanonicalizationMethod.EXCLUSIVE)以保证规范化一致,避免因空白、命名空间前缀差异导致验签失败签名不是覆盖原文,而是在XML中插入<signature></signature>节点(通常放在<signature></signature>命名空间下):
立即学习“Java免费学习笔记(深入)”;
DOMSignContext将XMLSignature对象绑定到目标Document的某个位置(例如根元素末尾或特定父节点)sign()触发计算:对每个Reference的URI定位内容 → 规范化 → 摘要 → 签名运算<signaturevalue></signaturevalue>是Base64编码的原始签名字节;<x509data></x509data>可嵌入证书用于验签方提取公钥签名后立即用XMLSignatureFactory.newXMLSignature()配合DOMValidateContext验证,可快速发现常见问题:
#id但目标元素无Id属性或未声明xml:id)KeySelector从<x509data></x509data>自动提取证书以上就是如何用Java给XML文档添加数字签名 XMLSignature API的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号