点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我想在ESR中使用Java映射执行签名数据。 如果我用作Java程序,则独立代码可以正常工作,但是当我在ESR中尝试该代码时,我得到了错误的签名。
我不明白如何通过TrustedCA中存储的私钥的路径。
我使用的代码:-
公共类signData {
public String result ="";
公共字符串signedData(字符串certificateName,字符串certificatePass,字符串数据){
尝试{
byte [] dataByte = data.getBytes();
X509Certificate certificate1 = null; Security.addProvider(new BouncyCastleProvider());
char [] keystorePassword = certificatePass.toCharArray();
char [] keyPassword = certificatePass.toCharArray();
CertificateFactory certFactory = CertificateFactory.getInstance(" X.509"," BC");
KeyStore密钥库= KeyStore.getInstance(" PKCS12");
InitialContext ctx = null;
ctx = new InitialContext();
KeystoreManager管理器= null;
manager =(KeystoreManager)ctx.lookup(" keystore");
keystore = manager.getKeystore(" TrustedCAs");
X509Certificate证书=(X509Certificate)keystore.getCertificate(certificateName);
byte [] certByte = certificate.getEncoded();
InputStream PKstream =新的ByteArrayInputStream(certByte);
keystore.load(PKstream,keystorePassword);
PrivateKey键= null;
KeyManagerFactory kmf = javax.net.ssl.KeyManagerFactory.getInstance(" SunX509");
kmf.init(keystore,keystorePassword);
枚举
同时(aliases.hasMoreElements()){
字符串别名= aliases.nextElement();
if(keystore.getCertificate(alias).getType()。equals(" X.509")){
certificate1 =(X509Certificate)keystore.getCertificate(alias);
key =(PrivateKey)keystore.getKey(alias,keyPassword);
}
}
CMSTypedData typedData =新的CMSProcessableByteArray(dataByte);
CMSSignedDataGenerator gen =新的CMSSignedDataGenerator();
ContentSigner签名者=新的JcaContentSignerBuilder(" SHA256withRSA")。setProvider(" BC")。build(key);
JcaSignerInfoGeneratorBuilder构建器=新的JcaSignerInfoGeneratorBuilder(新的JcaDigestCalculatorProviderBuilder()。setProvider(" BC")。build());
gen.addSignerInfoGenerator(builder.build(signer,certificate1));
CMSSignedData已签名= gen.generate(typedData,false);
byte [] der = signed.getEncoded();
字符串符号= Base64.encodeBytes(der);
返回符号;
}
捕获(异常e)
{
return e.getMessage();
}
}
有人可以帮助我吗?
Lakshay,
在签名后的代码中,您再次使用base64加密对其进行编码,这可能就是您获得错误签名的原因。 或者,如果该代码不起作用,请转至我在博客中共享的其他代码。
感谢Swapnil
嗨,Swapnil,
谢谢你的建议,它奏效了。 该方案现在可以正常工作,但是存在一个问题,无论我从ESR传递的密码是什么,它都会对数据进行签名,而与检查密码无关。
谢谢
Lakshay。
我有一个sap博客,其中包含所有必要的指令以通过Java映射对XML进行签名
https://blogs.sap.com/2020/01/09/sap-pi-po-xml-x509-signature-by-certificate/
我也尝试过,但是有 缺少一些图书馆。
Hello Lakshay,
我希望该博客可以帮助您解决问题博客,然后也只需博客。 并且如果两者都不起作用,则有大量可用的Java代码可以对您的文件进行签名,这就是博客。 请让我知道它是否有效。
谢谢
Swapnil
一周热门 更多>