WSO2EI - 向外 SOAP 调用因主机名验证失败

WSO2EI - Outward SOAP call fails with hostname validation

我的设置

我正在使用 WSO2EI 版本 6.4.0 来托管我的 Rest API。

我的客户端 --> WSO2EI --> 外部 SOAP 调用

我没有在 WSO2EI 和外部服务器之间设置任何相互 auth/keys 等。

我在做什么

当我的客户端调用我 (WSO2EI) 时,我 (WSO2EI) 调用其他 SOAP 端点(不同域)并且我 (WSO2EI) 是这些端点的客户端。

问题

来自客户(邮递员)的电话 --> WSO2EI --> OUT_SIDE_SOAP_END_POINT_1

来自客户(邮递员)的另一个调用 --> WSO2EI --> OUT_SIDE_SOAP_END_POINT_2 没有。

但是,来自客户(邮递员)的直接调用 --> OUT_SIDE_SOAP_END_POINT_2 有效

异常堆栈

[PassThroughMessageProcessor-1]  INFO {org.apache.axis2.transport.http.HTTPSender} -  Unable to sendViaPost to url[https://vsb.nrt.unabdev.sprint.com/services/CloudService]
javax.net.ssl.SSLPeerUnverifiedException: SSL peer failed hostname validation for name: null
    at org.opensaml.ws.soap.client.http.TLSProtocolSocketFactory.verifyHostname(TLSProtocolSocketFactory.java:233)
    at org.opensaml.ws.soap.client.http.TLSProtocolSocketFactory.createSocket(TLSProtocolSocketFactory.java:194)
    at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707)
    at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1361)
    at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
    at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
    at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:704)
    at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:199)
    at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:81)
    at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:459)
    at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:286)
    at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)
    at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:442)
    at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228)
    at org.apache.axis2.client.OperationClient.execute(OperationClient.java:149)
    at org.apache.synapse.message.senders.blocking.BlockingMsgSender.sendReceive(BlockingMsgSender.java:493)
    at org.apache.synapse.message.senders.blocking.BlockingMsgSender.send(BlockingMsgSender.java:385)
    at org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:90)
#
    at org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:85)
    at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:547)
    at org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:384)
    at org.apache.synapse.endpoints.DefaultEndpoint.send(DefaultEndpoint.java:77)
    at org.apache.synapse.mediators.builtin.CallMediator.handleBlockingCall(CallMediator.java:164)
    at org.apache.synapse.mediators.builtin.CallMediator.mediate(CallMediator.java:119)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:108)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:70)
    at org.apache.synapse.mediators.template.TemplateMediator.mediate(TemplateMediator.java:104)
    at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:148)
    at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:84)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:108)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:70)
    at org.apache.synapse.config.xml.AnonymousListMediator.mediate(AnonymousListMediator.java:37)
    at org.apache.synapse.mediators.filters.FilterMediator.mediate(FilterMediator.java:203)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:108)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:70)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:214)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:108)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:70)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
    at org.apache.synapse.rest.Resource.process(Resource.java:358)
    at org.apache.synapse.rest.API.process(API.java:426)
    at org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.java:135)
    at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:113)
    at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:71)
    at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:303)
    at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:98)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
    at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:337)
    at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:383)
    at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:151)
    at org.apache.axis2.transport.base.threads.NativeWorkerPool.run(NativeWorkerPool.java:172)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

我做了什么,他们是如何处理的

  1. 在 integrator.sh
  2. 上设置系统 属性[ignoreHostnameVerification]

-Dorg.wso2.ignoreHostnameVerification=true 相同异常

  1. 在 integrator.sh
  2. 上设置系统 属性[hostnameVerifier & disableHostnameVerification]
-Dhttpclient.hostnameVerifier=AllowAll \
-Dorg.opensaml.httpclient.https.disableHostnameVerification=true \

这个也没用。

由于从 postman 到 OUT_SIDE_SOAP_END_POINT_2 的直接调用有效,我认为 OUT_SIDE_SOAP_END_POINT_2 是开放的,我不应该对我的 WSO2EI 实例进行任何设置。

非常感谢任何想法和指示。

谢谢。

从您的堆栈跟踪来看,您似乎在阻塞模式下使用 Call 调解器。似乎已经报告了一个关于阻塞传输的问题。 https://github.com/wso2/product-ei/issues/1501

你能试试这个问题中建议的解决方法吗?

As a workaround for this, we can disable switching to opensaml http client by setting rampart.axiom.parser.pool=false in a server start up. So removing from the backlog

以下组合有效。这允许 Apache HTTP 客户端接管 SAML。但是,然后我不得不将证书添加到客户端信任库中。

-Dorg.wso2.ignoreHostnameVerification=true \
-Dorg.opensaml.httpclient.https.disableHostnameVerification=true \

这解决了这个特殊问题。