java - 得到类 org.bouncycastle.asn1.DLApplicationSpecific 不能转换为类 org.bouncycastle.asn1.ASN1SequenceParser 使用 camel-as2 调用 as2-lib
问题描述
我通过 as2-lib 启动了一个 AS2 服务器,并尝试通过 camel-as2 客户端端点调用服务器,我在双方都使用了相同的密钥库 --- as2-lib 示例提供的 certs.p12,
Keystore type: PKCS12
Keystore provider: SUN
Your keystore contains 2 entries
Alias name: openas2a_alias
Creation date: Oct 20, 2015
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=OpenAS2A, C=AT
Issuer: CN=OpenAS2A, C=AT
Serial number: 518a55c1
Valid from: Wed May 08 21:40:17 CST 2013 until: Sun Feb 20 21:40:17 CST 2287
Certificate fingerprints:
SHA1: CA:48:4D:01:A7:DE:FD:79:C1:DA:8C:56:37:A1:B9:7E:64:17:FD:DA
SHA256: C4:77:7A:23:A7:9C:4F:73:9C:E8:EE:C6:51:68:F9:13:9B:B9:7E:F8:D7:9B:88:1D:5F:26:9B:41:DB:61:3A:D4
Signature algorithm name: SHA1withRSA (weak)
Subject Public Key Algorithm: 2048-bit RSA key
Version: 1
*******************************************
*******************************************
Alias name: openas2b_alias
Creation date: Oct 20, 2015
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=OpenAS2B, C=AT
Issuer: CN=OpenAS2B, C=AT
Serial number: 5408301e
Valid from: Thu Sep 04 17:25:50 CST 2014 until: Sat Aug 11 17:25:50 CST 2114
Certificate fingerprints:
SHA1: FB:AB:0A:74:95:F4:5D:99:C0:6E:7D:31:72:D8:BB:60:5F:70:53:5D
SHA256: CC:E8:65:F9:19:D8:D2:75:DE:C8:C4:40:4F:F8:E5:1E:74:43:EB:96:0C:63:2B:13:13:71:43:92:CF:95:C5:62
Signature algorithm name: SHA1withRSA (weak)
Subject Public Key Algorithm: 2048-bit RSA key
Version: 1
*******************************************
*******************************************
在客户端(camel-as2),我加载 KeyStore 和 Private 密钥,如下所示:
...
fis = new FileInputStream(ksCfg.getFilePath());
char[] pwdChar = ksCfg.getPwd().toCharArray();
store = KeyStore.getInstance(ksCfg.getType());
store.load(fis,pwdChar);
...
key = store.getKey(alias,ksCfg.getMi().toCharArray());
...
camel-as2 组件配置如下:
Certificate[] senderChain = keyStoreLoader.getCertChain("openas2a_alias");
AS2Component as2Component = camelContext.getComponent("as2", AS2Component.class);
AS2Configuration configuration = new AS2Configuration();
configuration.setSigningAlgorithm(AS2SignatureAlgorithm.MD5WITHRSA);
configuration.setSigningCertificateChain(senderChain);
PrivateKey senderPK = keyStoreLoader.getPrivateKey("openas2a_alias");
configuration.setSigningPrivateKey(senderPK);
configuration.setSignedReceiptMicAlgorithms(new String[] {"md5"});
configuration.setEncryptingAlgorithm(AS2EncryptionAlgorithm.DES_EDE3_CBC);
Certificate[] receiverChain = keyStoreLoader.getCertChain("openas2b_alias");
configuration.setEncryptingCertificateChain(receiverChain);
PrivateKey decryptingKey = keyStoreLoader.getPrivateKey("openas2b_alias");
configuration.setDecryptingPrivateKey(decryptingKey);
configuration.setCompressionAlgorithm(AS2CompressionAlgorithm.ZLIB);
as2Component.setConfiguration(configuration);
camel-as2 客户端端点创建如下:
from("direct:toExt").autoStartup(true).routeId("toExt")
.setHeader("CamelAS2.subject",constant("AS2 Message To External Example"))
.setHeader("CamelAS2.as2MessageStructure",simple("SIGNED_ENCRYPTED",org.apache.camel.component.as2.api.AS2MessageStructure.class))
.to("as2://client/send?inBody=ediMessage&targetHostname={{demo.as2.extServer}}&targetPortNumber={{demo.as2.extServerPort}}&requestUri=/as2");
然后,在服务器端,在解密阶段遇到了类转换异常。在 com.helger.as2lib.crypto.BCCryptoHelper.decrypt
try
{
final SMIMEEnvelopedParser aEnvelope = new SMIMEEnvelopedParser (aPart);
aRecipient = aEnvelope.getRecipientInfos ().get (aRecipientID);
}
我是否使用了错误的密钥并以错误的方式加载了密钥库/密钥?
解决方案
推荐阅读
- postgresql - 为 postgres jsonb 创建多个 UUID
- vue.js - vuejs 相同的组件具有不同的数据
- python - 如何在没有 SymPy 的情况下计算函数的数值混合偏导数?
- node.js - 如何设置节点包中文件夹的入口点?
- c# - 从类中调用文本框
- http - Nginx 作为反向代理:如何为上游错误显示自定义错误页面,除非上游说不这样做?
- google-admin-sdk - posixAccounts API 信息缺失
- c++ - 如何在 Visual Studio 上将输入的开始和结束与 std::regex 匹配
- powershell - Active Directory - 在 PowerShell 中使用用户主体名称重置用户密码
- r - 加入有关四键的信息以平铺 shapefile