Apache camel 如何使用SSL连接从驼峰路由连接到IBM MQ?
我可以通过驼峰路由成功连接到IBMMQ并初始化连接工厂bean,但现在我想使用SSL连接Apache camel 如何使用SSL连接从驼峰路由连接到IBM MQ?,apache-camel,ibm-mq,Apache Camel,Ibm Mq,我可以通过驼峰路由成功连接到IBMMQ并初始化连接工厂bean,但现在我想使用SSL连接 我在服务器端为队列管理器创建密钥存储,创建证书并将其添加到其中 我在客户端创建了一个信任存储,并将证书添加到其中 现在我希望MQ连接工厂在连接到服务器时引用信任存储 以下是我尝试过的: <bean id="MyConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory"> <property name=
<bean id="MyConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
<property name="transportType" value="${queue.transportType}" />
<property name="channel" value="${queue.channel}" />
<property name="hostName" value="${queue.hostName}" />
<property name="port" value="${queue.port}" />
<property name="queueManager" value="${queue.manager}" />
<property name="sSLCipherSuite" value="SSL_RSA_WITH_NULL_MD5" />
<property name="sSLCertStores" value="file:C:/Servers/TrustStore/truststore.jks" />
</bean>
有人能告诉我怎么做吗?从安全角度来看,客户端应该只接收可能与许多问题有关的一般错误消息。找出客户机被拒绝的确切原因的最佳位置是队列管理器日志。我建议您查看一下,看看是否有任何错误可以帮助您进一步确定问题。 根据给出的信息,我可以想到3个问题:
您没有说明正在使用哪个版本的IBM MQ或什么JRE,如果它不是IBM MQ的最新版本,并且正在与Oracle JRE一起使用,则APAR可能会在这里有所帮助 在Tom Leend发布的IBM developerWorks博客“”的末尾,有一篇关于上述APAR的好文章。他为没有此修复程序的Java客户机提供了一个解决方案 我还要提到最后一个APAR,那就是IT10837(针对V7.1.0.8和V7.5.0.7,在V8.0.0.5中提供)。此APAR影响在Oracle JRE中运行的应用程序,这些应用程序使用TLS CipherSuite连接到队列管理器,其中正在使用的服务器连接通道将SSLCAUTH属性设置为“必需”(默认值)。这意味着客户端应将证书传递给队列管理器,以便MQ服务器可以对连接的客户端进行身份验证 当应用程序在Oracle JRE中运行时,SunJSSE提供程序没有为TLS套接字连接创建默认的内部密钥管理器对象,这意味着在握手期间客户端的已签名个人证书不可用于客户端身份验证。IBM JSSE提供程序根据通过Java系统属性传递的信息执行此操作:
- javax.net.ssl.keyStore 及
- javax.net.ssl.keystrepassword
我建议查阅有关这些MQ错误代码的IBM MQ文档。IBM必须在某个地方有文档,它们的意思可能是有帮助的:您找到问题的解决方案了吗?如果是,请让我们知道如何让其他有同样问题的人受益。
JMSWMQ0018: Failed to connect to queue manager 'QM_TEST_SSL'
with connection mode 'Client' and host name '10.3.13.161(1415)'.;
nested exception is com.ibm.mq.MQException: JMSCMQ0001:
WebSphere MQ call failed with compcode '2' ('MQCC_FAILED')
reason '2397' ('MQRC_JSSE_ERROR').
KeyStore keyStore = KeyStore.getInstance("JKS");
java.io.FileInputStream keyStoreInputStream = new java.io.FileInputStream("/home/tom/myKeyStore.jks");
keyStore.load (keyStoreInputStream, password_char_array);
KeyStore trustStore trustStore = KeyStore.getInstance ("JKS");
java.io.FileInputStream trustStoreInputStream = new java.io.FileInputStream("/home/tom/myTrustStore.jks");
trustStore.load (trustStoreInputStream, password_char_array);
keyStoreInputStream.close();
trustStoreInputStream.close();
KeyManagerFactory keyManagerFactory =
KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
TrustManagerFactory trustManagerFactory =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStore,password);
trustManagerFactory.init(trustStore);
SSLContext sslContext = SSLContext.getInstance("TLSv1");
sslContext.init(keyManagerFactory.getKeyManagers(),
trustManagerFactory.getTrustManagers(),
null);
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
// classes for JMS
myJmsConnectionFactory.setObjectProperty(
WMQConstants.WMQ_SSL_SOCKET_FACTORY, sslSocketFactory);
// classes for Java
MQEnvironment.sslSocketFactory = sslSocketFactory;