【发布时间】:2019-03-25 02:48:26
【问题描述】:
已安装 wso2am 2.6.0。
- 创建和发布 API -
Myapi。Myapi在 API 存储中可见,并且可以从那里调用(收到正确的响应)。 - 创建了我自己的自定义类演示中介(没什么花哨的,只是输出一些信息)并上传到
<API-M_HOME>/repository/components/lib。 - 使用我自己的自定义类创建了序列 xml,并为
Myapi手动上传了它(在 API 发布者“启用消息中介”中,用于“流中”)。 - 重启了服务器,看起来我的自定义类中介注册成功了。
但是现在我尝试通过 API 存储调用这个 API,它会抛出这样的异常:
[2019-03-23 21:04:00,858] ERROR - SourceHandler I/O error: Received fatal alert: certificate_unknown
javax.net.ssl.SSLException: Received fatal alert: certificate_unknown
at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)
at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1666)
at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1634)
at sun.security.ssl.SSLEngineImpl.recvAlert(SSLEngineImpl.java:1800)
at sun.security.ssl.SSLEngineImpl.readRecord(SSLEngineImpl.java:1083)
at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:907)
at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:781)
at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)
at org.apache.http.nio.reactor.ssl.SSLIOSession.doUnwrap(SSLIOSession.java:245)
at org.apache.http.nio.reactor.ssl.SSLIOSession.doHandshake(SSLIOSession.java:280)
at org.apache.http.nio.reactor.ssl.SSLIOSession.isAppInputReady(SSLIOSession.java:410)
at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:119)
at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:159)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:338)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:316)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:277)
at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:105)
at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:586)
at java.lang.Thread.run(Thread.java:748)
[2019-03-23 21:04:00,874] INFO - LogMediator IN_MESSAGE = json_validator
[2019-03-23 21:04:00,879] INFO - LogMediator STATUS = Executing default 'fault' sequence, ERROR_CODE = 0, ERROR_MESSAGE = Error occured in the mediation of the class mediator
当我选择另一个即json_validator 调解器(这不是我的自定义,所以问题不只是在我的自定义调解器中)时,也会发生同样的问题,但即使用debug_in_flow 调解器一切正常。
当中介器使用某些类中介器然后抛出此 SSL 异常时,似乎会出现此问题。
任何想法应该添加证书?据我了解,内部服务尝试在没有证书的情况下调用自定义 java 类并失败。
【问题讨论】:
-
调用 Java 类与任何证书无关。该异常确实表明,某些东西正在尝试调用 https 端点并且 ssl 握手失败。目前尚不清楚它是来自您的自定义中介还是服务目标端点。
Received fatal alert: certificate_unknown这可能表明端点需要客户端证书才能实现双向 ssl。你配置好了吗? -
@gusto,自定义中介很简单,它只输出一个字符串来记录。目标端点是 http(没有中介,一切正常)。
-
根据给定的信息,这种行为很奇怪。我觉得描述中缺少一些东西。您说您的 API 在附加序列之前工作。我有 2 个问题。 (1)如果你按顺序设置
None,那又可以用了吗? (2) 如果您从 lib 中删除您的 jar 并设置json_validator是否有效? -
@Bee,感谢您的建议,您的想法让我想到了从头开始重新安装 wso2am 服务器(因为之前进行了一些配置),现在它一直抛出这个异常,但它没有t 影响调解流程 - 无论如何都会调用自定义调解器(我已经对其进行了一些更新,现在它记录了信息)。另外我认为这个例外是因为 wso2am 在我的 vagrant ubuntu 机器上运行,我尝试从我的主机访问 wso2am,而不是从 localhost。
-
您的部署是什么样的?单节点一个?前面有负载均衡器吗?