点击此处---> 群内免费提供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("程序结束"); }
HI Rajesh,
感谢您的回复。
我的问题通过以下代码的Java映射得到解决:
嗨拉杰夫,
能否请您阐明您的要求并粘贴所用的Java映射? 我会帮你的。
感谢与问候-Rajesh PS
嗨Rajeev,
更好地排除故障并解决该错误。 检查详细的日志,并在需要时使用xpi检查器。 作为最后的选择,如果一切正常,并且系统仍然跳过签名,则可以提高OSS。 但是我认为将自定义编码作为解决方法不是一个好主意。
嗨,拉维,
我尝试使用SOAP的标准功能来使用Web Service安全性设置对消息进行签名,但是似乎不起作用。 我在日志中看到" Web Service安全处理已跳过" errorlog.png
在那之后,我想用Java映射来做,但是在Java中,它也面临从密钥库读取和加载值的问题。
任何帮助将不胜感激。
谢谢!
你好,
您要使用自定义代码进行邮件签名而不使用标准邮件签名功能的任何特定原因吗?
一周热门 更多>