【问题标题】:Issues while configuring the API Subscription BPS WSO2配置 API 订阅 BPS WSO2 时的问题
【发布时间】:2017-11-09 06:42:44
【问题描述】:

所以,我已将 WSO2 BPS 3.6.0 配置为支持 SSL 和自定义主机名,即 mydomain.domain.com:9445 等,我正在尝试实现 API 订阅工作流 遵循this 文档。

现在我已经执行了以下步骤:

  • 将 wso2 bps 的偏移量设置为 2,使用端口:9445 运行良好
  • 在 API-M_HOME/business-processes/epr 中的 SubscriptionService.eprSubscriptionCallbackService.epr 中编辑了 wsa:Address 标记 因为 bps 服务器有一个自定义的主机名而不是 localhost(不确定执行此步骤是否正确)

    订阅服务.epr SubscriptionCallBackService.epr

  • 将 epr 文件夹从 API-M_HOME/business-processes/epr 复制粘贴到 BPS_HOME/repository/conf/epr

  • 相应地添加了所需的BPEL 包人工任务

  • 从 APIM 导航到 carbon 控制台并编辑 workflow-extensions.xml,如下所示

  • b4p-cordination-config.xmlTaskCoordinationEnabled 标记设置为位于 BPS_Home\repository\conf 中的 true

考虑其他必需的配置:

在 API Manager 结束时

  • site.json 文件位于 APIM_Home\repository\deployment\server\jaggeryapps\admin\site\conf
{
  "theme": {
    "base": "wso2",
    "subtheme": "modern"
  },
  "context": "/admin",
  "request_url": "READ_FROM_REQUEST",
  "tasksPerPage": 10,
  "allowedPermission": "/permission/admin/manage/apim_admin",
  "workflows": {
     "workFlowServerURL": "https://mydomain.domain.com:9445/services/",
  },
  "ssoConfiguration": {
    "enabled": "false",
    "issuer": "API_WORKFLOW_ADMIN",
    "identityProviderURL": "https://localhost:9443/samlsso",
    "keyStorePassword": "",
    "identityAlias": "",
    "keyStoreName": "",
    "verifyAssertionValidityPeriod": "true",
    "audienceRestrictionsEnabled": "true",
    "responseSigningEnabled": "true",
    "assertionSigningEnabled": "true",
    "assertionEncryptionEnabled": "false",
    "idpInit" : "false",
    "idpInitSSOURL" : "https://localhost:9443/samlsso?spEntityID=API_WORKFLOW_ADMIN",
    "externalLogoutPage" : "https://localhost:9443/samlsso?slo=true"
  },
  "reverseProxy": {
    "enabled": false,
    // values true , false , "auto" - will look for  X-Forwarded-* headers
    "host": "sample.proxydomain.com",
    // If reverse proxy do not have a domain name use IP
    "context": ""
    //"regContext":"" // Use only if different path is used for registry
  }
}
  • api-manager.xml 中的工作流配置

在 BPS 结束时

  • 碳.xml

问题:现在,每当用户导航到 APIM 商店并订阅任何 API 时,APIM 管理控制台都会列出订阅请求。当我从提供的 ddl 中选择 APPROVE 并单击 COMPLETE 按钮时,记录就会消失。但是,这是我在 WSO2 的 CMD 窗口中看到的错误:

APIM 的 cmd 窗口

[2017-11-09 00:13:17,022] 信息 - TimeoutHandler 此引擎将 在 GLOBAL_TIMEOUT 之后过期所有回调:120 秒,无论 超时操作,在指定或可选超时后

[2017-11-09 00:13:17,164] 错误 - TargetHandler I/O 错误:主机名 主机验证失败:localhost javax.net.ssl.SSLException: 主机名验证失败:localhost 在 org.apache.synapse.transport.http.conn.ClientSSLSetupHandler.verify(C lentSSLSetupHandler.java:171) 在 org.apache.http.nio.reactor.ssl.SSLIOSession.doHandshake(SSLIOSession .java:308) 在 org.apache.http.nio.reactor.ssl.SSLIOSession.isAppInputReady(SSLIOSes sion.java:410) 在 org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(摘要 ctIODispatch.java:119) 在 org.apache.http.impl.nio.reactor.BaseIOReactor.可读(BaseIOReactor .java:159) 在 org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(Abstr actIOReactor.java:338) 在 org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(Abst ractIOReactor.java:316) 在 org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIO 反应堆.java:277) 在 org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor. 爪哇:105) 在 org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker。 运行(AbstractMultiworkerIOReactor.java:586) 在 java.lang.Thread.run(Thread.java:745)

[2017-11-09 00:13:17,188] 警告 - EndpointContext 端点:AnonymousEndpoint w 第 i 个地址 https://localhost:9443/store/site/blocks/workflow/workflow-listener/ ajax/workflow-listener.jag 将被标记为 SUSPENDED 因为它失败了

[2017-11-09 00:13:17,193] 警告 - EndpointContext 暂停端点 : 带有地址的匿名端点 https://localhost:9443/store/site/blocks/workflow/workflo w-listener/ajax/workflow-listener.jag - 当前挂起持续时间是: 30000ms - 下一次重试时间:Thu Nov 09 00:13:47 EST 2017

[2017-11-0900:13:17,201] 信息 - LogMediator 状态 = 执行默认“故障” 序列,ERROR_CODE = 101500,ERROR_MESSAGE = 发件人错误

[2017-11-09 00:14:17,238] INFO - SourceHandler Writer null 时 调用 informWriterError [2017-11-09 00:14:17,238] WARN - 读取请求 t 后 SourceHandler 连接超时: http-incoming-1 套接字超时:60000 远程地址:/10.10.30.130 :49249

[2017-11-09 00:14:24,671] 错误 - AxisEngine 端点 未找到操作的参考 (EPR) 是 /services/WorkflowCallbackService 和 WSA Action = null。如果这 EPR 以前可以访问,请联系服务器管理员 托。 org.apache.axis2.AxisFault:端点引用 (EPR) 未找到操作是 /services/WorkflowCallbackService 和 WSA 行动=空。如果以前可以访问此 EPR,请联系 服务器管理员。 在 org.apache.axis2.engine.DispatchPhase.checkPostConditions(DispatchPha se.java:102) 在 org.apache.axis2.engine.Phase.invoke(Phase.java:329) 在 org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:261) 在 org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:167) 在 org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEn 关闭RESTHandler(ServerWorker.java:325) 在 org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.j 艾娃:158) 在 org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(Native WorkerPool.java:172) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor. 爪哇:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor .java:617) 在 java.lang.Thread.run(Thread.java:745) [2017-11-09 00:14:24,673] 错误 - ServerWorker 错误处理 GET 请求: /services/WorkflowCallbackService org.apache.axis2.AxisFault: 未找到操作的端点参考 (EPR) 是 /services/WorkflowCallbackService 和 WSA Action = null。如果这 EPR 以前可以访问,请联系服务器 行政人员。 在 org.apache.axis2.engine.DispatchPhase.checkPostConditions(DispatchPha se.java:102) 在 org.apache.axis2.engine.Phase.invoke(Phase.java:329) 在 org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:261) 在 org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:167) 在 org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEn 关闭RESTHandler(ServerWorker.java:325) 在 org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.j 艾娃:158) 在 org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(Native WorkerPool.java:172) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor. 爪哇:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor .java:617) 在 java.lang.Thread.run(Thread.java:745)

BPS 的 cmd 窗口:

[2017-11-09 00:14:16,738] 错误 {org.wso2.carbon.bpel.core.ode.integration.Partn erService} - 错误 向 Axis2 发送消息以获取 ODE mex {PartnerRoleMex#hqejbhc nphrcr2a32g83oh [PID {http://workflow.subscription.apimgt.carbon.wso2.org}订阅 iptionApprovalWorkFlowProcess-1] 调用 org.apache.ode.bpel.epr.WSAEndpoint@705 fc38f.resumeEvent(...) 状态 REQUEST} org.apache.axis2.AxisFault:读取超时 在 org.apache.axis2.AxisFault.makeFault(AxisFault.java:430) 在 org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.jav 答:199) 在 org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:77) 在 org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessa geWithCommons(CommonsHTTPTransportSender.java:451) 在 org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(Com monsHTTPTransportSender.java:278) 在 org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442) 在 org.apache.axis2.description.OutOnlyAxisOperationClient.executeImpl(O utOnlyAxisOperation.java:297) 在 org.apache.axis2.client.OperationClient.execute(OperationClient.java: 149) 在 org.wso2.carbon.bpel.core.ode.integration.utils.AxisServiceUtils.invo keService(AxisServiceUtils.java:323) 在 org.wso2.carbon.bpel.core.ode.integration.PartnerService.invoke(Partn erService.java:333) 在 org.wso2.carbon.bpel.core.ode.integration.BPELMessageExchangeContextI mpl.invokePartner(BPELMessageExchangeContextImpl.java:43) 在 org.apache.ode.bpel.engine.BpelRuntimeContextImpl.invoke(BpelRuntimeC ontextImpl.java:897) 在 org.apache.ode.bpel.runtime.INVOKE.run(INVOKE.java:130) 在 sun.reflect.GeneratedMethodAccessor54.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:483) 在 org.apache.ode.jacob.vpu.JacobVPU$JacobThreadImpl.run(JacobVPU.java:4 51) 在 org.apache.ode.jacob.vpu.JacobVPU.execute(JacobVPU.java:139) 在 org.apache.ode.bpel.engine.BpelRuntimeContextImpl.execute(BpelRuntime ContextImpl.java:1002) 在 org.apache.ode.bpel.engine.PartnerLinkMyRoleImpl.invokeInstance(Partn erLinkMyRoleImpl.java:250) 在 org.apache.ode.bpel.engine.BpelProcess$1.invoke(BpelProcess.java:288)

    at org.apache.ode.bpel.engine.BpelProcess.invokeProcess(BpelProcess.java

:224) 在 org.apache.ode.bpel.engine.BpelProcess.invokeProcess(BpelProcess.java :279) 在 org.apache.ode.bpel.engine.BpelProcess.handleJobDetails(BpelProcess.j 艾娃:434) 在 org.apache.ode.bpel.engine.BpelEngineImpl.onScheduledJob(BpelEngineIm pl.java:558) 在 org.apache.ode.bpel.engine.BpelServerImpl.onScheduledJob(BpelServerIm pl.java:467) 在 org.apache.ode.scheduler.simple.SimpleScheduler$RunJob$1.call(SimpleS 调度程序.java:633) 在 org.apache.ode.scheduler.simple.SimpleScheduler$RunJob$1.call(SimpleS 调度程序.java:627) 在 org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(Simpl eScheduler.java:298) 在 org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(Simpl eScheduler.java:253) 在 org.apache.ode.scheduler.simple.SimpleScheduler$RunJob.call(SimpleSch eduler.java:627) 在 org.apache.ode.scheduler.simple.SimpleScheduler$RunJob.call(SimpleSch eduler.java:611) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor. 爪哇:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor .java:617) 在 java.lang.Thread.run(Thread.java:745) 引起:java.net.SocketTimeoutException:读取超时 在 java.net.SocketInputStream.socketRead0(本机方法) 在 java.net.SocketInputStream.read(SocketInputStream.java:150) 在 java.net.SocketInputStream.read(SocketInputStream.java:121) 在 sun.security.ssl.InputRecord.readFully(InputRecord.java:465) 在 sun.security.ssl.InputRecord.read(InputRecord.java:503) 在 sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:961) 在 sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:918)

    at sun.security.ssl.AppInputStream.read(AppInputStream.java:105)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
    at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:

78) 在 org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106 ) 在 org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection. 爪哇:1116) 在 org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$Http ConnectionAdapter.readLine(MultiThreadedHttpConnectionManager.java:1413) 在 org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMetho dBase.java:1973) 在 org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodB ase.java:1735) 在 org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.j 艾娃:1098) 在 org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(Htt pMethodDirector.java:398) 在 org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMe thodDirector.java:171) 在 org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.jav 一个:397) 在 org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(Abst ractHTTPSender.java:659) 在 org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.jav 答:195) ... 34 更多

这可能是什么问题?任何的想法?让我知道。谢谢

请注意,API STATE CHANGE 的 bps 工作流程在相同的配置下也能正常工作

【问题讨论】:

    标签: wso2 wso2-am wso2bps


    【解决方案1】:

    请注意,您正在使用带有特定域名的 HTTPS 调用

    主机名验证失败:org.apache.synapse.transport.http.conn.ClientSSLSetupHandler.verify(ClientSSLSetupHandler.java:171) 上的 localhost org.apache.http.nio.reactor.ssl.SSLIOSession.doHandshake (SSLIOSession .java:308)

    提供的证书是CN=localhost,所以确实主机验证失败

    你能做些什么

    • 最简单的方法是在安全网络(防火墙、vpn 等)上切换到 http
    • 更新 BPS 和 APIM 的 SSL 证书以匹配它们的主机名,并且它们必须相互信任证书(或证书颁发者)
    • 在axis2.xml中禁用SSL主机名验证(我不推荐它,对DEV有好处,对PROD非常糟糕)-设置<parameter name="HostnameVerifier">AllowAll</parameter>

    【讨论】:

    • 感谢您的回答! @gusto2 在我的情况下,APIM 和 BPS 的证书 + 主机名是相同的!还需要什么其他配置?
    • 显然,从您之前的问题来看,您只有使用证书的基本概念。重要的是要知道 CN 必须 与主机名匹配(因此 CN=localhost 仅适用于 localhost)。因此,您要么获取或创建有效证书和configure the ssl,要么在可行的情况下使用 http。接受风险时,您仍然可以禁用主机名验证
    • 对。您能否指定禁用主机名验证可能遇到的风险?
    • 当使用纯 http 时,您可以传输纯文本(无加密)并且您知道它(在后端网络上可以正常)。禁用主机名验证仍将使用 SSL,但是使用来自其他站点的受信任证书的人将能够欺骗通信,而您不会意识到这一点。在构建 PoC 或 DEV 环境时,请随意禁用主机名验证,对于从 Internet 访问服务器的生产环境,您应该小心
    • 好的。我在 class=org.apache.synapse.transport.passthru.PassThroughHttpSSLSender 部分编辑了 apim 的 axis2.xml 以禁用主机名验证,但问题仍然存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多