首页 > 解决方案 > 得到类 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);
    }

我是否使用了错误的密钥并以错误的方式加载了密钥库/密钥?

标签: javasslapache-camel

解决方案


推荐阅读