4

我使用 Java 客户端,使用JMS/JNDI. 使用单向 SSL 身份验证时连接正常SSLCAUTH(OPTIONAL)。我做的第一步是导出客户端的公共证书:

keytool -export -keystore keystore -storepass storepass -alias CLIENT -file client.cer

然后我将此证书添加到 MQ 密钥存储库。

gsk7cmd -cert -add -db keydb.kdb -pw password -label ibmwebspheremqclient -file client.cer -format binary

我终于切换到SSLCAUTH(REQUIRED)模式。

我收到以下错误日志。消息很清楚,它找不到我的客户端证书。我读到我的客户证书应该有一个标签ibmwebspheremq<client_user_id>。因为我是通过 Java 连接的,所以这个用户 ID 是什么?

AMQ9637: Channel is lacking a certificate.
4

1 回答 1

2

根据 Technote Specifying the userid in the SSL certificate label for an MQ 客户端,Java 和 JMS 客户端不会根据标签找到他们的证书。

问题通常是信任存储和密钥存储之间的不匹配。我经常看到两个问题。

  1. 应用程序指定了信任库,但没有指定密钥库。这适用于匿名(单向)SSL,但不适用于相互验证的 SSL。应用程序必须为相互身份验证指定密钥存储和信任存储。
  2. 有时应用程序指定了一个信任存储文件,但私有证书在密钥存储中。或者应用程序为信任存储和密钥存储指定相同的文件,并且个人证书实际上位于单独的信任存储文件中。

这两种方法都能解决问题吗?如果不是,请使用keytool -cert -list密钥库和信任库以及设置密钥库/信任库的命令行或代码部分更新问题。

于 2012-10-12T13:40:20.713 回答