websphere mq

    技术2024-04-15  102

    本文向您展示如何配置从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

    相关资源:Java下操作IBM Websphere MQ的项目案例
    Processed: 0.017, SQL: 9