在我的计算机上安装MQ客户端(IBM MQ version 9.04.0)之后,我使用以下命令试图连接到我工作的公司上的远程MQ,
输入:
P:\>amqssslc -s TLS_RSA_WITH_AES_256CBC_SHA256 -k "t:\Desktop\certificates\key" -x "server.com(1414)" -c "0000%XXXX%QMGR" -m QMGR输出:
Sample AMQSSSLC start Connecting to queue manager
Using the server connection channel 0000%XXXX%QMGR
on connection name server.com(1414).
Using SSL CipherSpec TLS_RSA_WITH_AES_256CBC_SHA256
Using SSL key repository stem t:\Desktop\certificates\key
No OCSP configuration specified
MQCONNX ended ith reason code 2393其中,-k指示.* path,它是一组文件(kdb、rdb、sht)。这些文件是使用IKeyMan - IBM Key Manager从当前开发人员用来连接web应用程序的cer.jks文件创建的。
错误日志文件显示以下错误:
06/11/202020 19:29:45 - Process(25780.1) User(username) Program(amqssslc.exe)
Host(myhost) Installation(Installation1)
VRMF(9.1.3.0)
Time(2020-06-11T09:24:53.270Z)
RemoteHost(xx.xx.xxx.56)
CommenInsert1(0000%XXXX%QMGR)
CommenInsert2(server.com(1414))
AMQ9642: No SSL or TLS certificate for channel '0000%XXXX%QMGR'.
EXPLANATION:
The channel '0000%XXXX%QMGR' did not supply a certificate to use during SSL
or TLS handshaking, but a certificate is required by the remote queue manager.
The remote host is 'server.com(1414)'.
The channel did not start.
ACTION:
Ensure that the key repository of the local queue manager or MQ client contains
a certificate which is associated with the queue manager or client.
Alternatively, if appropriate, change the remote channel definition so that its
SSLCAUTH attribute is set to OPTIONAL and it has no SSLPEER value set. 它让我相信,错误与通道侧的握手有关。Jks证书适用于连接到服务器上队列的其他开发人员.
我的mqclient.ini文件有以下添加的配置:
TCP:
KeepAlive = Yes
CLientExithPath:
ExitsDefaultPath=C:\ProgramData\IBM\MQ\exits
ExitsDefaultPath64=C:\ProgramData\IBM\MQ\exits64
SSL:
OCSPAuthentication=NO
OCSPCheckExtension=NO
CDPCheckExtension=NO有什么问题吗?我还尝试更改我的证书的标签,以表明key.kdb文件上有一个个人证书,但是,它删除了一个不同的错误,我从我工作的公司的it人员那里得知,不需要这个证书标签。
发布于 2020-06-18 11:19:19
最后,OP (@EdgarHernandez)注意到这个错误是CipherSpec中的一个错误,TLS_RSA_WITH_AES_256CBC_SHA256而不是正确的名称TLS_RSA_WITH_AES_256_CBC_SHA256导致/贡献了2393
将我在这个答案中的注释中的疑难解答注释放在这个答案中,这样它们就可以在将来搜索,所以用户会看到类似的错误。
Java/JMS如何选择要发送到队列管理器的证书,以及使用C库的客户端如何选择要发送到队列管理器的证书,这是有区别的。
Java/JMS:
Java不使用证书标签,它根据队列管理器信任的颁发者所信任的内容向队列管理器提供它认为是匹配的证书,因此拥有队列管理器信任的CA颁发的个人证书就足够了。
C图书馆客户端:
C库客户端(它是amqssslc )将证书选择建立在证书标签上。默认情况下,它将查找标签ibmwebspheremq<lowercase username>,因此如果您作为用户edgar运行MQ客户端将查找的证书是ibmwebspheremqedgar。
在MQV8.0及更高版本的
amqssslc使用-l标签选项来实现这一点。因此,如果您的证书只标记为edgar,则应该可以添加-l edgar以获取证书.。
使用下面的命令检查您是否列出了个人证书,它应该在第一列中以-作为前缀,如果它仅以!作为前缀,那么它只是密钥的公共部分,而不是私有部分。
runmqakm -cert -list -db t:\Desktop\certificates\key.kdb -stashed
https://stackoverflow.com/questions/62371139
复制相似问题