需要从我的一个Mule Project调用一个安全的Web服务。为此我创建了一个自签名证书并配置我的项目如下:
1)将keystore.jks保留在Project
的资源文件夹中2)在Globals.xml文件中定义了一个https连接器
<https:connector name="movilcashHttpsConnector" doc:name="HTTP-HTTPS" clientSoTimeout="10000" cookieSpec="netscape" receiveBacklog="0" receiveBufferSize="0" sendBufferSize="0" serverSoTimeout="10000" socketSoLinger="0" validateConnections="true">
<https:tls-key-store path="keystore.jks" keyPassword="changeit" storePassword="changeit" />
<https:tls-server path="keystore.jks" storePassword="changeit" />
</https:connector>
3)在调用https端点时,我使用了以下配置
<https:outbound-endpoint method="POST"
doc:name="HTTP" exchange-pattern="request-response" transformer-refs="Message_Properties2"
responseTimeout="90000"
address="https://partners.masmovilcash.com/TelepinWeb/TpinBulkLoading?BatchType=7&FileExt=PNG&FileAbbrv=C_R&FileType=KYC_Documents&CustomerID=#[flowVars['tpin-customerid']]&FileSequence=2"
connector-ref="movilcashHttpsConnector">
</https:outbound-endpoint>
4)在运行mule standlaone的Linux服务器中部署项目。
但不幸的是,每次我收到以下错误: 消息:无法通过端点路由事件:DefaultOutboundEndpoint {endpointUri = https://partners.masmovilcash.com/TelepinWeb/JSON-RPC,connector = HttpsConnector
消息有效内容的类型为:PostMethod(org.mule.api.transport.DispatchException) sun.security.validator.ValidatorException:找不到可信证书 at sun.security.validator.SimpleValidator.buildTrustedChain(SimpleValidator.java:384)
我错过了什么吗?请帮帮忙。
答案 0 :(得分:0)
由于您要对外部服务(https://partners.masmovilcash.com/TelepinWeb/JSON-RPC)执行HTTPS请求,因此您需要确保您的应用程序信任该服务证书。这意味着如果为HTTPS连接器设置信任存储,则表示信任存储需要包含服务证书。
考虑到我已经能够从浏览器访问您需要的服务,它可能由适当的证书颁发机构(CA)签名,这意味着默认的Java信任存储应该可以工作。这意味着,请尝试不设置任何信任存储/密钥存储数据,以便使用JVM默认值。类似的东西:
<https:connector name="movilcashHttpsConnector" doc:name="HTTP-HTTPS" clientSoTimeout="10000" cookieSpec="netscape" receiveBacklog="0" receiveBufferSize="0" sendBufferSize="0" serverSoTimeout="10000" socketSoLinger="0" validateConnections="true"/>