我正在尝试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);
添加回答
举报
0/150
提交
取消