使用API管理器的Mule代理SOAP服务
我试图在mule中代理HTTPS SOAP服务,因此在anypoint中使用API管理器并在那里提供wsdl url,但在部署应用程序时,我得到如下错误使用API管理器的Mule代理SOAP服务,mule,Mule,我试图在mule中代理HTTPS SOAP服务,因此在anypoint中使用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"
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>
但由于未配置TLS,因此收到以下错误。不确定如何在wsdl函数中配置TLS
sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径
有两个不同的问题 1.您无法从属性文件中读取属性。 回答:需要使用spring上下文标记将属性文件加载到上下文中 例如:
有关更多详细信息,请参阅
2.SSL握手异常。
回答:
您将获得此异常,因为您正在尝试访问受保护的资源,而对于此资源,您没有向JDK添加有效的证书
为此,请检查mule/anypoint studio中配置的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-keystore-path-to-jre/lib/security/cacerts-file-path-to-certificate文件
例如:
keytool-import-alias newCert-keystore/opt/jdk1.6/jre/lib/security/cacerts-file/home/newCert.der
系统将提示您输入密钥库密码,默认情况下为changeit
或
您可以使用一个基于java的实用工具轻松地完成这项工作。
在wsdl函数中配置TLS。 TLS配置元素独立于任何模块或传输。在Mule 3.7以后的版本中,HTTP连接器和Web服务使用者都支持它 您可以通过HTTP连接器全局配置元素的UI(位于TLS/SSL选项卡上)或Web服务使用者的UI(位于安全选项卡上)创建此元素 context元素定义了tls的配置,可以从客户端和服务器端使用。它可以被其他模块的其他配置对象引用(或定义为其中一个模块的嵌套元素) 在其中,可以包含两个嵌套元素:密钥存储和信任存储。您不需要同时包含这两个选项,但必须至少包含其中一个: 从服务器端:信任存储包含受信任客户端的证书,密钥存储包含服务器的私钥和公钥 从客户端:信任存储包含受信任服务器的证书,密钥存储包含客户端的私钥和公钥
将信任存储或密钥存储添加到TLS配置会隐式实现相应类型的身份验证。将密钥库和信任存储添加到同一配置(如上面的代码示例所示)会隐式实现双向TLS身份验证,也称为相互身份验证。如果您发现下面的答案有助于解决问题,请告诉我们。.感谢您的详细回复Mahesh。对于答案1-我不是在构建项目,它的mule anypoint API本身正在创建具有这些属性的项目,对于答案2-我不能在本地拥有密钥库,而是使用TLS Unsecure作为所有https连接的真实密钥。因此,我的疑问是如何在wsdl(“url”)dataweave函数中配置tls,或者是否有其他方法来创建HTTPS代理服务
#[dw(wsdl('https://myhost/check/checkrecieveAPI?WSDL'))]
<context:property-placeholder location="propetyFileName.properties" />
<flow name="myProject_flow">
<logger message="${propertyFromPropertyFile}" doc:name="System Property
Set in Property File"/>
</flow>