websphere mq
本文向您展示如何配置从Java™/ JMS客户端到IBM®WebSphere®MQ队列管理器的安全套接字层(SSL)连接。 它涵盖测试证书的创建,但不涵盖任何MQ配置信息。 它纯粹是Java / JMS客户指南,并且需要IBM SDK。
需要以下步骤1、3和4来配置SSL连接。 仅当您希望配置客户端身份验证时,才执行步骤2。 为了降低复杂性并简化任何潜在问题的调试,建议您最初不要使用客户端身份验证。 建立基本的SSL连接后,可以升级到客户端身份验证。
如果遇到配置问题,则可能有助于指定调试标志: -Djavax.net.debug=true
。
1.创建trustStore
顾名思义,trustStore拥有您信任的队列管理器的签名CA的证书。 对于Java / JMS客户端,这意味着与队列管理器建立连接时,它将作为初始SSL握手的一部分将其证书发送给我们。 处理所有SSL通信的JSSE将在trustStore中查找以验证刚刚发送的证书。 如果无法验证证书,则连接将终止。
要创建trustStore并导入证书,可以使用IBM Key Management工具,该工具是Websphere MQ V6的一部分:
- 在开始栏中,选择程序=> IBM Websphere MQ => IBM密钥管理 。
- IBM Key Management启动时,单击“ 新建”并设置以下值:
-
密钥数据库类型
- JKS 文档名称
- trustStore 位置
- 您选择的位置
- 单击确定继续。
图1
- 现在将提示您输入您选择的密码。 仅当您希望向trustStore添加证书时才需要密码。 如果JSSE仅用作trustStore,则不需要密码。 对于此示例,请输入密码。
- 单击确定继续。 现在,您应该拥有一个trustStore,可以在其中导入受信任CA的证书。
- 选中标签密钥数据库内容下的下拉框。
- 选择签署者证书 。
图2
- 点击添加 。 系统将提示您输入要添加的证书的位置。 如果您正在使用自签名证书进行测试,则此证书将是“队列管理器”证书,或者是颁发了“队列管理器”证书的CA证书。 有关为SSL配置队列管理器的信息,请参见MQ安全手册,第13章。
- 输入以下数据:
-
数据类型
- 二进制DER数据 证书文件名
- <队列管理器证书名称> 位置
- <证书的位置>
- 单击确定 。 将提示您输入标签,标签格式应为
<ibmwebspheremq<qmname lowercase>
。 - 单击确定以添加证书。
2.创建密钥库
仅当与队列管理器建立连接时希望进行客户端身份验证时,才完成本节。 如果尚未在通道上指定客户端身份验证,则无需完成本节。
除了存储客户端的个人证书,并且JSSE要求访问密码外,keyStore本质上与trustStore相同。 实际上,您可以将您的个人证书添加到之前创建的trustStore中,它将同时充当trustStore和keyStore,但是现在不需要将以前不需要的密码传递给JSSE,以便它可以访问您的个人证书。
要创建KeyStore,请按照第1节中的步骤,用keyStore
替换trustStore
,直到添加CA证书为止。 此时,请完成以下步骤:
- 选中标签密钥数据库内容下的下拉框。
- 选择个人证书 :
图3
- 点击新建自签名 。 这将为您自己创建一个测试证书。
- 如果已经有颁发给您的证书,请单击“ 接收”以添加它:
图4
与创建队列管理器个人证书不同,对必须使用的密钥标签没有限制。
- 输入如上所示的详细信息。
- 单击确定完成。
设置keyStore的最后一部分是将您的证书或CA证书添加到Queue Managers密钥存储库,以便在客户端发送其证书时,Queue Manager可以对其进行验证。 以下是从keyStore中提取证书的方法,以便可以将其添加到Queue Managers密钥存储库中:
- 选中标签密钥数据库内容下的下拉框。
- 选择“ 个人证书” 。
- 选择您的证书。
- 点击提取证书 。
图5
- 输入证书名称。
- 指定位置。
- 单击确定完成。
完成此任务后,只需将其添加到Queue Managers存储库中即可。
3.将trustStore和keyStore分配给应用程序
您可以使用应用程序内设置的系统属性或命令行上的-D
标志,将trustStore和KeyStore的位置传递给JSSE。 要在应用程序中设置它们,请使用下面的代码。 trustStore
和keyStore
的位置可以指向同一文件:
System.setProperty("javax.net.ssl.trustStore","<location of trustStore>");
System.setProperty("javax.net.ssl.keyStore","<location of keyStore>");
System.setProperty("javax.net.ssl.keyStorePassword","<password>");
要使用-D
标志:
java -Djavax.net.ssl.trustStore=<location of trustStore>
-Djavax.net.ssl.keyStore=<location of keyStore>
-Djavax.net.ssl.keyStorePassword=<password><app>
4.配置CipherSuite
您希望连接的通道应定义一个CipherSpec
。 内的Java / JMS应用程序中的CipherSuite
必须指定的相匹配CipherSpec
。 下表将帮助您做到这一点:
密码规范 | 密码套件 |
---|---|
NULL_MD5 | SSL_RSA_WITH_NULL_MD5 |
NULL_SHA | SSL_RSA_WITH_NULL_SHA |
RC4_MD5_EXPORT | SSL_RSA_EXPORT_WITH_RC4_40_MD5 |
RC4_MD5_US | SSL_RSA_WITH_RC4_128_MD5 |
RC4_SHA_US | SSL_RSA_WITH_RC4_128_SHA |
RC2_MD5_EXPORT | SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5 |
DES_SHA_EXPORT | SSL_RSA_WITH_DES_CBC_SHA |
RC4_56_SHA_EXPORT1024 | SSL_RSA_EXPORT1024_WITH_RC4_56_SHA |
DES_SHA_EXPORT1024 | SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA |
TRIPLE_DES_SHA_US | SSL_RSA_WITH_3DES_EDE_CBC_SHA |
TLS_RSA_WITH_AES_128_CBC_SHA | SSL_RSA_WITH_AES_128_CBC_SHA |
TLS_RSA_WITH_AES_256_CBC_SHA | SSL_RSA_WITH_AES_256_CBC_SHA |
AES_SHA_US | |
TLS_RSA_WITH_DES_CBC_SHA | SSL_RSA_WITH_DES_CBC_SHA |
TLS_RSA_WITH_3DES_EDE_CBC_SHA | SSL_RSA_WITH_3DES_EDE_CBC_SHA |
FIPS_WITH_DES_CBC_SHA | SSL_RSA_FIPS_WITH_DES_CBC_SHA |
FIPS_WITH_3DES_EDE_CBC_SHA | SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA |
您可以在许多地方指定CipherSuite
。
如果使用的是MQ Java Client,则可以在MQEnvironment.SSLCipherSuite:
指定字符串MQEnvironment.SSLCipherSuite:
MQEnvironment.sslCipherSuite = "SSL_RSA_WITH_NULL_MD5";
您还可以使用键MQC.SSL_CIPHER_SUITE_PROPERTY
将哈希表中的字符串传递给QueueManager构造函数或MQEnvironment.properties
哈希表:
MQEnvironment.properties.put(MQC.SSL_CIPHER_SUITE_PROPERTY, "SSL_RSA_WITH_NULL_MD5");
要么:
Hashtable properties = new Hashtable();
properties.put(MQC.SSL_CIPHER_SUITE_PROPERTY, "SSL_RSA_WITH_NULL_MD5");
MQQueueManager myQM = new MQQueueManager("MyQMgr", properties);
如果使用的是MQ JMS客户端,则可以使用setSSLCipherSuite()
方法在连接工厂上设置CipherSuite
:
MQConnectionFactory factory = new MQConnectionFactory();
factory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
factory.setQueueManager("MyQMgr");
factory.setSSLCipherSuite("SSL_RSA_WITH_NULL_MD5");
factory.setPort(1414);
factory.setHostName("127.0.0.1");
MQConnection connection = factory.createConnection();
结论
本文向您展示了如何:
- 创建一个TrustStore并将Queue Managers证书导入其中。
- 创建一个密钥库,其中保存已创建的测试证书。
- 将它们分配给您的应用程序,并配置Websphere MQ JMS客户端以使用它们。
翻译自: https://www.ibm.com/developerworks/websphere/library/techarticles/0510_fehners/0510_fehners.html
websphere mq