- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在准备通过SSL连接到Websphere MQ 7.0的测试环境,因此在启动configuring the SSL connection from JMS side之前,我必须在Websphere MQ上配置SSL。
因此,我尝试按照these步骤为Websphere MQ创建SSL证书。但是,当我尝试使用gsk7cmd.exe -cert -receive -db key.kdb -pw pass -file QMANAGER_signed.arm
命令将签名证书添加到存储库时,出现错误:
An attempt to receive the certificate has failed.
All the signer certificates must exist in the key database.
gsk7capicmd
,但它也失败了,并显示以下错误:
Error: 146
Error id: GSKKM_ERR_INVALID_CERT_CHAIN
Details: QMANAGER_signed.arm
MQJE001: Completion Code '2', Reason '2397'
SSL日志(使用
-Djavax.net.debug=all
选项)显示以下错误:
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2397;AMQ9771: SSL handshake failed. [1=javax.net.ssl.SSLHandshakeExcep
tion[Remote host closed connection during handshake],3=localhost/127.0.0.1:1414 (localhost),4=SSLSocket.startHandshake,5
=default]
at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection.protocolConnect(RemoteTCPConnection.java:995)
at com.ibm.mq.jmqi.remote.internal.system.RemoteConnection.connect(RemoteConnection.java:989)
at com.ibm.mq.jmqi.remote.internal.system.RemoteConnectionPool.getConnection(RemoteConnectionPool.java:293)
at com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiConnect(RemoteFAP.java:1371)
at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:331)
... 7 more
Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
at com.ibm.jsse2.jc.a(jc.java:380)
at com.ibm.jsse2.jc.g(jc.java:115)
at com.ibm.jsse2.jc.a(jc.java:240)
at com.ibm.jsse2.jc.startHandshake(jc.java:54)
at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection.protocolConnect(RemoteTCPConnection.java:989)
... 11 more
Caused by: java.io.EOFException: SSL peer shut down incorrectly
at com.ibm.jsse2.a.a(a.java:7)
at com.ibm.jsse2.jc.a(jc.java:493)
... 15 more
最佳答案
您看到的错误是因为您的密钥库没有签名CA的根和/或中间签名者证书。当您从证书颁发机构处获得签名证书时,必须先对其进行验证,然后再将其添加到密钥库中。几乎任何人都可以拦截您的签名请求并签署证书。收到时对其进行验证的步骤可确保它是由您真正信任的CA签名的,而不是由某些匿名中间人签名的。
验证证书的方法是通过对照KDB中CA的公钥检查CA签名。为此,当您尝试接收已签名的证书时,CA的证书必须已经在KDB中。如果CA使用中间签名者证书(并且由于各种原因,任何商业CA将使用中间证书),那么您还必须已经导入了中间证书和根证书。这形成了从CA的根证书到任何中间证书到您的签名证书的证书链或证书路径。链中的所有事物都将由其上方的事物进行身份验证,直到到达根为止。您的KDB必须具有整个链,并且由于每个证书均已通过其上一个证书验证,因此您必须从根开始导入所有证书,然后逐步向下进行。
通常,您的CA会在其网站上发布其签名者证书,您可以在其中使用SSL检索它们。提取并导入它们,您将能够收到签名的证书。
碰巧的是,《 The Sphere Online Journal》刚刚发表了一篇文章,以Verisign为例,引导您完成此过程,并提供了导入根和中间签署者证书的屏幕截图。本文是关于Renewing WebSphere MQ Certificates的,但本文的第一部分创建了一个kdb文件和一个签名请求,然后导入了CA证书和已签名的证书。
让我们也带您到正确的信息中心。请查看Using CA Signed Certificates的WMQ v7.0信息中心部分。您正在看的是Message Broker,坦率地说,您链接到的文章有些混乱。我将解决此问题。对于初学者来说,在一个kdb中创建证书,对其进行签名,然后将其导出,删除,然后将其导入到QMgr的KDB中的想法纯属垃圾。只需在QMgr自己的KDB文件中生成CSR,然后直接将签名的证书接收到该文件即可。这要容易得多,这就是上述文章中说明的过程。
最后,如果您转到t-rob.net并从IMPACT 2011下载WMQ安全实验室,则将找到一个实验室指南和一些脚本。这些使用自签名证书,但是脚本可以轻松转换为使用CA签名证书,然后针对WMQ网络进行定制。
更新:
在评论中回应他的其他问题:
我实际上计划使用自签名证书,所以我想我只需要提取它并将其添加到客户的信任库中?
对,那是正确的。但是这是WMB信息中心页面中的一个问题,该问题最初被链接为,它要求您创建标签为qmgrname
而不是ibmwebspheremqqmgrname
的证书。 QMgr根据标签找到其证书,因此它必须与指定的格式匹配。因此,当您创建自签名证书时,请确保标签为文字ibmwebspheremq
,QMgr名称折叠为小写字母。如果您使用错误的标签制作了证书,则始终可以将其导出到P12文件,然后再使用正确的标签将其导入到新的KDB中。
我使用WMQ安全实验室中提到的WMQ SSL向导来创建正确的配置。配置进行得很顺利,但是当我运行SSL向导随附的JMS示例时,出现错误MQJE001: Completion Code '2', Reason '2397'
,SSL日志显示以下错误main, received EOFException: error main, handling exception: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake main, SEND TLSv1 ALERT: fatal, description = handshake_failure
有几种原因可能导致这种情况发生。我将建议一些诊断技术,而不是全部介绍它们。设置SSL通道时,我始终使用以下过程:
REFRESH SECURITY TYPE(SSL)
命令。 SSLCAUTH(OPTINAL) SSLPEER()
。这验证客户端接受QMgr的证书。仅当此方法有效时,请转到下一步。 SSLCAUTH(REQUIRED) SSLPEER()
。这将导致QMgr请求客户端的证书。 SSLPEER
,请将其设置为所需的值。 SSLPEER
值即可。
SSLCAUTH(REQUIRED)
(顺便说一下,这是默认值),并且QMgr没有该应用程序的证书或您正在尝试使用匿名连接,而客户端不需要个人证书。在这种情况下,设置
SSLCAUTH(OPTIONAL)
将使您超越故障点-尽管可能会到达一个全新的故障点。
关于java - 通过SSL使用JMS连接到WebSphere MQ 7.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9351533/
我知道这个问题可能已经被问过,但我检查了所有这些,我认为我的情况有所不同(请友善)。所以我有两个数据集,第一个是测试数据集,第二个是我保存在数据框中的预测(预测值,这就是没有数据列的原因)。我想合并两
在 .loc 方法的帮助下,我根据同一数据框中另一列中的值来识别 Panda 数据框中某一列中的值。 下面给出了代码片段供您引用: var1 = output_df['Player'].loc[out
当我在 Windows 中使用 WinSCP 通过 Ubuntu 连接到 VMware 时,它提示: The server rejected SFTP connection, but it lis
我正在开发一个使用 xml web 服务的 android 应用程序。在 wi-fi 网络中连接时工作正常,但在 3G 网络中连接时失败(未找到 http 404)。 这不仅仅发生在设备中。为了进行测
我有一个XIB包含我的控件的文件,加载到 Interface Builder(Snow Leopard 上的 Xcode 4.0.2)中。 文件的所有者被设置为 someClassController
我在本地计算机上管理 MySQL 数据库,并通过运行以下程序通过 C 连接到它: #include #include #include int main(int argc, char** arg
我不知道为什么每次有人访问我网站上的页面时,都会打开一个与数据库的新连接。最终我到达了大约 300 并收到错误并且页面不再加载。我认为它应该工作的方式是,我将 maxIdle 设置为 30,这意味着
希望清理 NMEA GPS 中的 .txt 文件。我当前的代码如下。 deletes = ['$GPGGA', '$GPGSA', '$GPGSV', '$PSRF156', ] searchquer
我有一个 URL、一个用户名和一个密码。我想在 C# .Net WinForms 中建立 VPN 连接。 你能告诉我从哪里开始吗?任何第三方 API? 代码示例将受到高度赞赏... 最佳答案 您可以像
有没有更好的方法将字符串 vector 转换为字符 vector ,字符串之间的终止符为零。 因此,如果我有一个包含以下字符串的 vector "test","my","string",那么我想接收一
我正在编写一个库,它不断检查 android 设备的连接,并在设备连接、断开连接或互联网连接变慢时给出回调。 https://github.com/muddassir235/connection_ch
我的操作系统:Centos 7 + CLOUDLINUX 7.7当我尝试从服务器登录Mysql时 [root@server3 ~]# Mysql -u root -h localhost -P 330
我收到错误:Puma 发现此错误:无法打开到本地主机的 TCP 连接:9200(连接被拒绝 - 连接(2)用于“本地主机”端口 9200)(Faraday::ConnectionFailed)在我的
请给我一些解决以下错误的方法。 这是一个聊天应用....代码和错误如下:: conversations_controller.rb def create if Conversation.bet
我想将两个单元格中的数据连接到一个单元格中。我还想只组合那些具有相同 ID 的单元格。 任务 ID 名称 4355.2 参与者 4355.2 领袖 4462.1 在线 4462.1 快速 4597.1
我经常需要连接 TSQL 中的字段... 使用“+”运算符时 TSQL 强制您处理的两个问题是 Data Type Precedence和 NULL 值。 使用数据类型优先级,问题是转换错误。 1)
有没有在 iPad 或 iPhone 应用程序中使用 Facebook 连接。 这个想法是登录这个应用程序,然后能够看到我的哪些 facebook 用户也在使用该应用程序及其功能。 最佳答案 是的。
我在连接或打印字符串时遇到了一个奇怪的问题。我有一个 char * ,可以将其设置为字符串文字的几个值之一。 char *myStrLiteral = NULL; ... if(blah) myS
对于以下数据 - let $x := "Yahooooo !!!! Select one number - " let $y := 1 2 3 4 5 6 7 我想得到
我正在看 UDEMY for perl 的培训视频,但是视频不清晰,看起来有错误。 培训展示了如何使用以下示例连接 2 个字符串: #!usr/bin/perl print $str = "Hi";
我是一名优秀的程序员,十分优秀!