无法在 Apache Camel AS2 库中发送消息特定的签名 MDN 响应

问题描述 投票:0回答:1

我在我的 Java 项目中使用 Apache Camel AS2 库,在该项目中我实现了 AS2 服务器。 目前,我正在通过在服务器端点配置中配置证书和算法来生成签名的 MDN 响应,并且它工作正常。但是,我想根据 AS2 请求对 MDN 进行签名,在标头中,我将获取用户请求的 Mic 算法。因此,我想在运行时使用其中一种算法进行签名,而不是在端点创建时对算法进行硬编码。

我也浏览了库代码,并在线检查,但我无法找到任何解决方案。

我见过在线服务器https://mendelson-e-c.com/as2_testserver,它具有相同的功能,并根据AS2消息进行签名,请帮助我实现这一点。

我的服务器代码如下所示,在端点配置中定义签名。

@Singleton
public class As2Server extends RouteBuilder {
    private final CamelContext camelContext;

    @Inject
    public As2Server(CamelContext camelContext) {
        this.camelContext = camelContext;
    }

    @Override
    public void configure() {
        try {
            from(configureServerEndpoint()).process(exchange -> {

            // processing logic

            });
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    private Endpoint configureServerEndpoint() throws Exception {
        AS2Configuration endpointConfiguration = new AS2Configuration();
        endpointConfiguration.setApiName(AS2ApiName.SERVER);
        endpointConfiguration.setMethodName(AS2ServerManagerApiMethod.LISTEN.name());
        endpointConfiguration.setDecryptingPrivateKey(getPrivateKey());
        endpointConfiguration.setSigningPrivateKey(getPrivateKey());
        endpointConfiguration.setSigningCertificateChain(getCertificateChain());
        endpointConfiguration.setSigningAlgorithm(AS2SignatureAlgorithm.MD5WITHRSA);
        endpointConfiguration.setMdnMessageTemplate("Your AS2 message has been received");

        try (AS2Component as2Component = new AS2Component()) {
            as2Component.setCamelContext(camelContext);
            as2Component.setConfiguration(endpointConfiguration);
            return as2Component.createEndpoint(STR."as2://server/listen?serverPortNumber=11080&requestUriPattern=*");
        }
    }

}
java apache-camel quarkus
1个回答
0
投票

此时我们遇到了麦克风问题,因为我们正在使用 AS2SignatureAlgorithm.SHA256WITHRSA,并且当您尝试直接从消息发送算法时,您可能会开始遇到问题。如果您知道 MD5 有效,为什么需要更改它?

顺便说一句,就像我告诉过你的那样,我们正在使用 SHA256WITHRSA 进行测试,但显然不起作用。我只是做了一些更改以使用 SHA2WITHRSA 因为在一些文章中我读到签名的支持算法是 SHA-1 和 MD5,您是否测试了任何其他错误,我们收到的下一个错误是。

org.apache.http.HttpException: Failed to encode MIC
at org.apache.camel.component.as2.api.util.MicUtils.createReceivedContentMic(MicUtils.java:111)
at org.apache.camel.component.as2.api.entity.AS2MessageDispositionNotificationEntity.<init>(AS2MessageDispositionNotificationEntity.java:95)
at org.apache.camel.component.as2.api.entity.DispositionNotificationMultipartReportEntity.<init>(DispositionNotificationMultipartReportEntity.java:66)
at org.apache.camel.component.as2.api.protocol.ResponseMDN.process(ResponseMDN.java:157)
at org.apache.http.protocol.ImmutableHttpProcessor.process(ImmutableHttpProcessor.java:142)
at org.apache.http.protocol.HttpService.handleRequest(HttpService.java:360)
at org.apache.camel.component.as2.api.AS2ServerConnection$RequestHandlerThread.run(AS2ServerConnection.java:163)
Caused by: java.lang.IllegalArgumentException: Data must be specified
at org.apache.camel.util.ObjectHelper.notNull(ObjectHelper.java:153)
at org.apache.camel.component.as2.api.util.EntityUtils.encode(EntityUtils.java:89)
at org.apache.camel.component.as2.api.util.MicUtils$ReceivedContentMic.<init>(MicUtils.java:48)
at org.apache.camel.component.as2.api.util.MicUtils.createReceivedContentMic(MicUtils.java:109)
... 6 common frames omitted

如果您在尝试做您想做的事情之前使用其他算法进行测试,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.