为了账号安全,请及时绑定邮箱和手机立即绑定

带有 PKCS11 提供程序 HSM 的 JAVA XML 签名

带有 PKCS11 提供程序 HSM 的 JAVA XML 签名

慕标5832272 2021-12-30 20:53:16
我正在尝试XML使用我的私钥进行签名,HSM但我收到一个错误,因为私钥包含“敏感”信息,所以现在我正在尝试使用我的PKCS11提供商进行签名。我正在使用Luna JSP provider.这就是我使用私钥生成签名的方式,根据我对错误的理解 com.safenetinc.luna.exception.LunaException: 无法访问敏感属性,我需要使用PKCS11提供程序才能在我的内部签名,HSM但我没有t 看看如何使用XMLSignatureFactory.XMLSignatureFactory fac;try {  fac = XMLSignatureFactory.getInstance("DOM", (Provider) Class.forName(providerName).newInstance());}catch(InstantiationException | IllegalAccessException | ClassNotFoundException e) {  e.printStackTrace();}Reference ref;SignedInfo si;try {  ref = fac.newReference("",                         fac.newDigestMethod(xmldss.getDigestMethod(), null),                         Collections.singletonList(fac.newTransform(Transform.ENVELOPED,                                                                    (TransformParameterSpec) null)),                         null,                         null);  si = fac.newSignedInfo(fac.newCanonicalizationMethod(xmldss.getCanonicalizationMethod(),                                                       (C14NMethodParameterSpec) null),                         fac.newSignatureMethod(xmldss.getSignatureMethod(), null),                         Collections.singletonList(ref));}catch(NoSuchAlgorithmException | InvalidAlgorithmParameterException e) {  e.printStackTrace();}DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();dbf.setNamespaceAware(true);Document document;try {  document = (dbf.newDocumentBuilder().parse(xmlDocumentStream));}catch(SAXException | IOException | ParserConfigurationException e) {  e.printStackTrace();}DOMSignContext dsc = new DOMSignContext(keyPair.getPrivate(), document.getDocumentElement());dsc.setDefaultNamespacePrefix(xmldss.getDigitalSignerPrefix());XMLSignature signature = fac.newXMLSignature(si, buildKeyInfo(fac, signatureInfos));try {  signature.sign(dsc);}catch(MarshalException | XMLSignatureException e) {  e.printStackTrace();}
查看完整描述

1 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

深入研究后,DOMXMLSignature我发现该属性org.jcp.xml.dsig.internal.dom.SignatureProvider可用于设置提供程序。


所以我的解决办法是做


Provider lunaProvider = Security.getProvider("LunaProvider");

dsc.setProperty("org.jcp.xml.dsig.internal.dom.SignatureProvider", lunaProvider);


查看完整回答
反对 回复 2021-12-30
  • 1 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信