通过 .net 客户端通过 SSL 连接至 IBM MQ

3

我正在尝试通过.NET客户端连接到MQ服务器队列。我需要使用证书进行安全通信。以下是我的代码:

MQEnvironment.SSLKeyRepository = "*SYSTEM";
MQEnvironment.ConnectionName = connectionName;
MQEnvironment.Channel = channelName;
MQEnvironment.properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);
MQEnvironment.SSLCipherSpec = "TLS_RSA_WITH_AES_256_CBC_SHA"; 

queueManager = new MQQueueManager(queueManagerName, channelName, connectionName);

queue = queueManager.AccessQueue(SendQueueName,MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING);
queueMessage = new MQMessage();
queueMessage.WriteString(message);
queueMessage.Format = MQC.MQFMT_STRING;
queue.Put(queueMessage, new MQPutMessageOptions());

每当我尝试将消息放入队列时,就会收到此错误消息。

Reason Code: 2059
MQexp.Message: MQRC_Q_MGR_NOT_AVAILABLE

我检查了队列管理器名称、队列名称等变量,它们是正确的。我还能够连接到一个没有SSL的不同队列,我相信我的代码并没有提供足够的信息来建立成功的连接。
希望能得到任何帮助。
谢谢, Kunal

你能展示一下队列管理器的错误日志吗?如果你进行了典型的安装,你可以在 \ProgramData\IBM\MQ<qmgr>\errors 目录下找到错误日志。此外,你是否在使用 MQ v8? - Shashi
这是服务器端的错误 - AMQ9639:远程通道 '<MY_CHANNEL>' 没有指定 CipherSpec。 - Kunal Nair
你已经在客户端应用程序中指定了CipherSpec。但是你是否已经配置了你的队列管理器和通道来使用SSL? - Shashi
1个回答

2

我曾遇到同样的问题和错误信息。启用跟踪后,我能够找出问题所在。 我一直想知道客户端如何从存储中选择正确的客户端证书。跟踪输出显示如下:

000001B2 15:53:46.828145   20776.10    Created an instance of SSLStreams
000001B3 15:53:46.828145   20776.10    Setting current certificate store as 'Computer'
000001B4 15:53:46.828145   20776.10    Created store object to access certificates
000001B5 15:53:46.834145   20776.10    Opened store
000001B6 15:53:46.834145   20776.10    Accessing certificate - ibmwebspheremqmyusername
000001B7 15:53:46.835145   20776.10    TLS12 supported - True
000001B8 15:53:46.837145   20776.10    Setting SslProtol as Tls
000001B9 15:53:46.837145   20776.10    Starting SSL Authentication

在我的情况下,我必须将客户端证书的友好名称设置为ibmwebspheremqmyusername(将“myusername”替换为您的用户ID),并在代码中也设置标签:
properties.Add(MQC.MQCA_CERT_LABEL, "ibmwebspheremqmyusername");  

要启用跟踪,请将以下内容添加到您的app.config/web.config中,其中路径指向包含名为mqtrace.config的文件的位置:

<appSettings>
    <add key="MQTRACECONFIGFILEPATH" value="C:\MQTRACECONFIG" />
</appSettings>
文件的示例内容(指定的目录必须事先存在):
<?xml version="1.0" encoding="utf-8"?>
<traceSettings>
  <MQTRACELEVEL>2</MQTRACELEVEL>
  <MQTRACEPATH>C:\MQTRACEPATH</MQTRACEPATH>
  <MQERRORPATH>C:\MQERRORLOGPATH</MQERRORPATH>
</traceSettings>

以下是更详细的链接:

跟踪:
https://www.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/com.ibm.mq.dev.doc/q123550_.htm 为什么需要标签:
http://www-01.ibm.com/support/docview.wss?uid=swg21245474


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接