gpt4 book ai didi

用于将文件发送到 https Web 服务的所有信任的 java 类

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:49:35 27 4
gpt4 key购买 nike

我需要编写自己的类来告诉 mule 已验证与服务 (wsdl) 的 https 连接。我已经有一个 mule 项目快完成了,但最后一 block 不见了,在特定的 url 发送文件。

我想要实现的目标:

  1. 建立连接并发送xml到目标url

  2. 读取同样在 xml 中的响应

服务器使用带有自签名证书的安全性。到目前为止,我所做的是从该链接获得证书并将其导入 .jks。然后我可能遵循了所有“教程”如何使用 https 连接器连接到 mule 中的服务器,但在我的情况下没有任何效果。

我认为如果有人可以帮助我创建 java 类来绕过 key 检查并返回 true(已验证),那将是最好的事情。像这样的东西:

URL url = new URL("https://www.google.com");
HttpsURLConnection conn= (HttpsURLConnection) url.openConnection();
conn.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
});

我怎样才能在 mule 中做到这一点?我希望它类似于 this .

我正在使用当前的 mule 版本 (3.5.0)

谢谢!

编辑:

我的配置:

<https:connector name="HttpsConnector" cookieSpec="netscape" validateConnections="true" sendBufferSize="0" receiveBufferSize="0" receiveBacklog="0" clientSoTimeout="10000" serverSoTimeout="10000" socketSoLinger="0" doc:name="HTTP\HTTPS" dynamicNotification="true" >
<https:tls-server path="${keystore.path}" storePassword="${keystore.pass}" />
</https:connector>

<sub-flow name="toSOAP" doc:name="toSOAP">
<cxf:proxy-client payload="body" doc:name="SOAP" enableMuleSoapHeaders="false">
<cxf:outInterceptors>
<spring:ref bean="WSS4JOutInterceptorBean"/>
</cxf:outInterceptors>
</cxf:proxy-client>
<https:outbound-endpoint exchange-pattern="one-way" host="${pref.host}" port="${pref.port}" path="${pref.path}" method="POST" connector-ref="HttpsConnector" doc:name="HTTP"/>
</sub-flow>

最佳答案

对我有用的是在 HTTPS 连接器上设置 TrustManagerFactory。这是我的做法。

首先,创建一个 keystore ,其中包含您要信任的 SSL 服务器的证书。您可以使用 JDK ( here's an example ) 附带的工具创建 keystore 。

然后,创建一个 FactoryBean,在给定 JKS keystore 和密码的情况下为您提供一个 TrustManagerFactory。这是我使用 Spring 资源制作的一个,这样我就可以从类路径或文件系统中提供 keystore :

public class ExampleFactoryBean implements FactoryBean<TrustManagerFactory> {

private Resource keystore;
private String password;

@Override
public TrustManagerFactory getObject() throws Exception {
KeyStore truststore = KeyStore.getInstance("JKS");
truststore.load(keystore.getInputStream(), password.toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(truststore);
return tmf;
}

@Override
public Class<?> getObjectType() {
return TrustManagerFactory.class;
}

@Override
public boolean isSingleton() {
return true;
}

public void setKeystore(Resource keystore) {
this.keystore = keystore;
}

public void setPassword(String password) {
this.password = password;
}
}

最后,像这样在 HTTP 连接器上设置 TrustManagerFactory:

<https:connector name="myHttpsConnector">
<spring:property name="trustManagerFactory">
<spring:bean class="com.mycompany.ssl.ExampleFactoryBean">
<spring:property name="keystore" value="classpath:mykeystore.keystore" />
<spring:property name="password" value="mypassword" />
</spring:bean>
</spring:property>
</https:connector>

关于用于将文件发送到 https Web 服务的所有信任的 java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21156929/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com