点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)您好专家 我正在尝试使用存储在...
点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)您好专家 我正在尝试使用存储在...
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
您好专家
我正在尝试使用存储在密钥库中的SSL证书对XML进行签名。 我试图使用以下代码调用证书。但是当我尝试跟踪已加载的证书时,它始终会给出nullPointer异常。
package com.nets.e2e; 导入java.io.ByteArrayOutputStream; 导入java.io.IOException; 导入java.io.InputStream; 导入java.io.OutputStream; 导入java.security.InvalidKeyException; 导入java.security.KeyStore; 导入java.security.KeyStoreException; 导入java.security.NoSuchAlgorithmException; 导入java.security.PrivateKey; 导入java.security.Security; 导入java.security.Signature; 导入java.security.UnrecoverableEntryException; 导入java.security.cert.Certificate; 导入java.security.cert.X509Certificate; 导入java.util.Date; 导入java.util.HashMap; 导入java.util.Map; 导入org.apache.commons.codec.binary.Base64; 导入javax.naming.InitialContext; 导入javax.naming.NamingException; 导入javax.xml.parsers.DocumentBuilder; 导入javax.xml.parsers.DocumentBuilderFactory; 导入javax.xml.parsers.ParserConfigurationException; 导入javax.xml.transform.OutputKeys; 导入javax.xml.transform.Transformer; 导入javax.xml.transform.TransformerConfigurationException; 导入javax.xml.transform.TransformerException; 导入javax.xml.transform.TransformerFactory; 导入javax.xml.transform.dom.DOMSource; 导入javax.xml.transform.stream.StreamResult; 导入org.w3c.dom.Document; 导入org.xml.sax.SAXException; 导入com.sap.aii.mapping.api.AbstractTrace; 导入com.sap.aii.mapping.api.AbstractTransformation; 导入com.sap.aii.mapping.api.MappingTrace; 导入com.sap.aii.mapping.api.StreamTransformationConstants; 导入com.sap.aii.mapping.api.StreamTransformationException; 导入com.sap.aii.mapping.api.TransformationInput; 导入com.sap.aii.mapping.api.TransformationOutput; 导入com.sap.aii.security.lib.KeyStoreManager; 导入com.sap.security.api.ssf.ISsfData; 导入com.sap.security.api.ssf.ISsfProfile; 导入com.sap.security.core.server.ssf.SsfDataPKCS7; 导入com.sap.security.core.server.ssf.SsfInvalidKeyException; 导入com.sap.security.core.server.ssf.SsfProfileKeyStore; 导入com.sap.aii.af.service.resource.SAPSecurityResources; 公共类XadesSignature扩展了AbstractTransformation {@SuppressWarnings(" deprecation")public void transform(TransformationInput TransformationInput,TransformationOutput TransformationOutput)throws StreamTransformationException {try {InputStream inputstream = TransformationInput.getInputPayload()。getInputStream(); OutputStream outputstream = TransformationOutput.getOutputPayload()。getOutputStream(); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 文档doc = dBuilder.parse(inputstream); byte [] b =新的byte [inputstream.available()]; inputstream.read(b); ISsfData数据=新的SsfDataPKCS7(inputstream); getTrace()。addInfo(" ISsfdata对象已创建"); KeyStoreManager manager = null; manager = com.sap.aii.af.service.resource.SAPSecurityResources.getInstance()。getKeyStoreManager(com.sap.aii.security.lib.PermissionMode.SYSTEM_LEVEL); KeyStore keyStore = manager.getKeyStore(" ESigning_API_SSL");
SsfProfileKeyStore配置文件=新的SsfProfileKeyStore(keyStore," ESigning_API_SSL",null); //getTrace()。addInfo(profile.getCertificate()。getSignature()。toString()); //profile = manager.getISsfProfile(keyStore," ESigning_API_SSL",null); getTrace()。addInfo(profile.toString()); data.sign(profile); ByteArrayOutputStream baos = new ByteArrayOutputStream(); data.writeTo(baos); 字符串signedString =新字符串(baos.toByteArray()); doc.getElementsByTagName(" TrustB2BMessage")。item(0).setTextContent(signedString); doc.getDocumentElement()。normalize(); TransformerFactory TransformerFactory = TransformerFactory.newInstance(); 变压器变压器= transformerFactory.newTransformer(); DOMSource source =新的DOMSource(doc); StreamResult结果=新的StreamResult(outputstream); Transformer.setOutputProperty(OutputKeys.INDENT,"是"); Transformer.transform(来源,结果); } catch(KeyStoreException | SsfInvalidKeyException | IOException | ParserConfigurationException | SAXException | TransformerException ex){ex.printStackTrace(); } getTrace()。addInfo("程序结束"); }
嗨Rajeev,
更好地排除故障并解决该错误。 检查详细的日志,并在需要时使用xpi检查器。 作为最后的选择,如果一切正常,并且系统仍然跳过签名,则可以提高OSS。 但是我认为将自定义编码作为解决方法不是一个好主意。
一周热门 更多>