【问题标题】:Mule Proxying SOAP Service with API Manager使用 API 管理器的 Mule 代理 SOAP 服务
【发布时间】:2017-11-21 19:20:36
【问题描述】:

我正在尝试在 mule 中代理 HTTPS SOAP 服务,因此在任何时候都使用了 API 管理器并在那里给出了 wsdl url,但是在部署应用程序时我收到如下错误

Could not resolve placeholder 
'wsdl(p['wsdl.uri']).services[0].preferredPort.addresses[0].host' 
    in string value "<http:request-config name="http-request-config" 
    host="![wsdl(p['wsdl.uri']).services[0].preferredPort.addresses[0].host]" 
    port="![wsdl(p['wsdl.uri']).services[0].preferredPort.addresses[0].port]" protocol="HTTPS">
    </http:request-config>

我已经下载了项目并且 wsdl.uri 属性存在于属性文件中。

更新:

为了了解 wsdl 函数返回的内容,我尝试在示例项目中提供以下数据编织。

#[dw(wsdl('https://myhost/check/checkrecieveAPI?WSDL'))]

但由于未配置 TLS 而收到以下错误。不确定如何在 wsdl 函数中配置 TLS。

sun.security.provider.certpath.SunCertPathBuilderException: 无法找到请求目标的有效证书路径

【问题讨论】:

  • 如果您发现以下答案有助于解决问题,请告诉我们..

标签: mule


【解决方案1】:

有两个不同的问题。

1.您无法从属性文件中读取属性。

答案:需要使用spring context标签将属性文件加载到context中。

例如:

<context:property-placeholder location="propetyFileName.properties" />
<flow name="myProject_flow">
<logger message="${propertyFromPropertyFile}" doc:name="System Property 
 Set in Property File"/>
</flow>

更多详情请参考link

2.SSL握手异常。

答案:

您收到此异常,因为您正在尝试访问受保护的资源,并且您没有为该资源添加有效的 JDK 证书。

为此,请检查在您的 mule/anypoint 工作室中配置的 JDK。

您需要将所需的证书导入您的 JDK。

有几种方法可以做到这一点。以下是我使用的一种方法,

当您的 Java 程序尝试连接到具有无效或自签名证书的服务器时,例如开发环境中的应用程序服务器,您可能会遇到以下异常:

javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

要使您的 Java 运行时环境信任该证书,您需要将其导入 JRE 证书存储区。

第 1 步 - 将证书放入浏览器商店

使用 SSL 浏览到您的应用程序服务器。您的浏览器会告诉您该证书不受信任并允许您信任它,从而将其放置在浏览器证书存储中。

第 2 步 - 将证书导出到二进制文件

您的浏览器将具有某种证书管理器,允许您将特定证书导出或备份到二进制文件。在 Firefox 中,这将位于 Preferences / Advanced / Encryption / Servers 下。找到服务器提供的证书并将其导出为二进制 DER 文件。

第 3 步 - 将证书导入 Java 商店

确保您对 JRE 具有写入权限并使用 keytool 实用程序将其导入:

keytool -import -alias alias -keystore path-to-jre/lib/security/cacerts -file path-to-certificate-file

例子:

keytool -import -alias newCert -keystore /opt/jdk1.6/jre/lib/security/cacerts -file /home/newCert.der

系统将提示您输入密钥库密码,默认为 changeit。

您可以使用基于实用程序的 Java 工具轻松完成此操作。请查看以下链接。 https://github.com/escline/InstallCert

【讨论】:

  • 感谢 Mahesh 的详细回复。对于答案 1-我不是在构建项目,它的 mule anypoint API 本身正在使用这些属性创建项目,对于答案 2-我不能在我的本地拥有密钥库,而是对所有 https 连接使用 TLS 不安全作为 true .所以我的疑问是如何在 wsdl('url') dataweave 函数中配置 tls,或者是否有任何其他方式来创建 HTTPS 代理服务
【解决方案2】:

在 wsdl 函数中配置 TLS。 TLS 配置元素独立于任何模块或传输。从 Mule 3.7 开始,HTTP 连接器和 Web 服务使用者都支持它。

您可以通过 HTTP 连接器的全局配置元素的 UI,在 TLS/SSL 选项卡上,或通过 Web 服务使用者的 UI,在安全选项卡上创建此元素。

tls:context 元素定义了 TLS 的配置,可以在客户端和服务器端使用。它可以被其他模块的其他配置对象引用(或定义为其中一个的嵌套元素)。

在其中,您可以包含两个嵌套元素:key-store 和 trust-store。您不需要同时包含两者,但必须至少包含其中之一:

从服务器端:信任库包含受信任客户端的证书,密钥库包含服务器的私钥和公钥。

从客户端:信任库包含受信任服务器的证书,密钥库包含客户端的私钥和公钥。

将信任库或密钥库添加到 TLS 配置会隐式实现相应类型的身份验证。将密钥库和信任库同时添加到同一个配置(如上面的代码示例中)隐式实现了双向 TLS 身份验证,也称为相互身份验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多