我尝试从在 WebSphere 应用服务器上启动的简单 Web 服务连接到 WMQ。

在 WMQ 上,我有使用 SSL 的 channel 。我现在使用自签名证书。

在 glassfish 的情况下,我只是将此证书添加到域中的 key 存储中并且一切正常(因为我配置了我的 MQQueueConnectionFactory)。

但是在 WebSphere 上这个技巧不起作用:

[5/13/13 14:00:25:058 FET] 00000060 SystemOut     O %% Invalidated:  [Session-94, SSL_RSA_EXPORT_WITH_RC4_40_MD5]
[5/13/13 14:00:25:058 FET] 00000060 SystemOut     O jmsContainer-1, SEND SSLv3 ALERT:  fatal, description = certificate_unknown
[5/13/13 14:00:25:058 FET] 00000060 SystemOut     O jmsContainer-1, WRITE: SSLv3 Alert, length = 2
[5/13/13 14:00:25:058 FET] 00000060 SystemOut     O [Raw write]: length = 7
[5/13/13 14:00:25:058 FET] 00000060 SystemOut     O 0000: 15 03 00 00 02 02 2e                               .......

[5/13/13 14:00:25:058 FET] 00000060 SystemOut     O jmsContainer-1, called closeSocket()
[5/13/13 14:00:25:058 FET] 00000060 SystemOut     O jmsContainer-1, handling exception: javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.j: PKIX path building failed: java.security.cert.CertPathBuilderException: unable to find valid certification path to requested target
[5/13/13 14:00:25:058 FET] 00000060 DefaultMessag E org.springframework.jms.listener.DefaultMessageListenerContainer refreshConnectionUntilSuccessful Could not refresh JMS Connection for destination 'fromESB' - retrying in 5000 ms. Cause: JMSWMQ0018: Failed to connect to queue manager 'qm1' with connection mode 'Client' and host name '192.168.56.101(1414)'.; nested exception is com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2397' ('MQRC_JSSE_ERROR').

如何将 WebSphere 应用服务器配置为使用 ssl(如何将服务器(WMQ)证书添加到信任库?或者信任库在哪里?)?

最佳答案

好的。我自己解决了这个问题。

配置 WMQ:

  • 创建 keystore

    runmqckm -keydb -create -db "c:\dev\sslqm001\sslqm001.kdb"-pw
    serverpass -type cms -expire 365 -stash
  • 创建证书并将其添加到 keystore

    runmqckm -cert -create -db "c:\dev\sslqm001\sslqm001.kdb"-pw
    serverpass -label ibmwebspheremqssl_qm001 -dn "CN=SSL_QM001,OU=IT,O=SomeCompany,L=Minsk,ST=Belarus,C=
    BY"-expire 365
  • 将此证书从 keystore 导出到文件。

    runmqckm -cert -extract -db "c:\dev\sslqm001\sslqm001.kdb"-pw
    serverpass -label ibmwebspheremqssl_qm001 -target SSL_QM001.crt -format ascii
  • 在队列管理器设置中,选项卡“SSL”将没有 .kdb 和 FIPS 的 keystore 的路径设置为否:

    ALTER QMGR SSLKEYR('c:\dev\sslqm001\sslqm001')
    更改 QMGR SSLFIPS(NO)
  • 创建新 channel
  • 在 channel 设置中,选项卡“SSL”将密码设置为某个值(对我有用:DES_SHA_EXPORT),并将身份验证设置为可选

    DEFINE CHANNEL('SSL_CHANNEL') CHLTYPE(SVRCONN) TRPTYPE(TCP) SSLCIPH(DES_SHA_EXPORT) SSLCAUTH(OPTIONAL) REPLACE
  • 在队列管理器中刷新 SSL:

    刷新安全类型(SSL)

  • 更改您的 appcontex:
    <bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
        <property name="hostName" value="${queue_hostname}"/>
        <property name="port" value="${queue_port}"/>
        <property name="queueManager" value="${queue_manager}"/>
        <property name="transportType" value="1"/>
        <property name="SSLCipherSuite" value="SSL_RSA_EXPORT_WITH_RC4_40_MD5"/>
        <property name="channel" value="ssl_channel"/>
    </bean>
    

    在 WAS 上设置 SSL
  • 前往:

    安全 → SSL 证书和 key 管理 → SSL 配置 →
    NodeDefaultSSLSettings → keystore 和证书 → NameOfStore →
    签名者证书
  • 添加我们在步骤 3 中导出的证书
  • 关于java - 在 Websphere App Server 和 Websphere MQ 之间配置 SSL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16520536/

    10-09 05:02