8

为了对抗 WMQ 安全通道,我拥有以下发现:

  1. 在 WMQ 场中定义的安全通道
  2. 公钥/私钥
  3. 非托管安全出口程序集

我的问题是如何利用这些资源并使用 XMS API与安全通道交互?(使用 C#)

这是我迄今为止尝试过的,但没有成功:

private IConnectionFactory CreateConnectionFactory()
{
    XMSFactoryFactory factoryFactory = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);

    IConnectionFactory connectionFactory = factoryFactory.CreateConnectionFactory();

    connectionFactory.SetStringProperty(XMSC.WMQ_HOST_NAME, _wmqHostName);
    connectionFactory.SetIntProperty(XMSC.WMQ_PORT, _wmqPort);
    connectionFactory.SetStringProperty(XMSC.WMQ_CHANNEL, _wmqChannel);
    connectionFactory.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT_UNMANAGED);
    connectionFactory.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, _wmqQueueManager);
    connectionFactory.SetIntProperty(XMSC.WMQ_BROKER_VERSION, 0);
    connectionFactory.SetStringProperty(XMSC.WMQ_SECURITY_EXIT, "MySecurityExitName");

    return (connectionFactory);
}

调用它时出现以下错误:

CWSMQ0006E: 在调用 ConnectionFactory.CreateConnection 方法期间接收到异常:CompCode: 2, Reason: 2195。在执行指定方法期间,另一个组件引发了异常。有关详细信息,请参阅链接的异常。

更新:

我找到了以下技术说明,它描述了我的问题及其可能的(未经测试的)解决方案:

https://www-304.ibm.com/support/docview.wss?uid=swg1IC82112

4

2 回答 2

4

很高兴你找到了 Technote。还要确保...

  • 如果进行相互认证(SVRCONN 通道设置为SSLCAUTH(REQUIRED)),则应用的个人证书具有与服务帐户匹配的标签。例如,如果应用程序作为dotnetacct其密钥库中个人证书的标签运行,则为ibmwebspheremqdotnetacct.
  • 让通道在没有 SSL 或退出的情况下运行。然后做服务器认证的 SSL,然后是相互认证的 SSL,然后重新添加出口。这样可以隔离问题。
  • 使用最新的 WMQ 客户端。我指的不是 v7.0 或 v7.1 的最新修复包,而是最新的 v7.5(撰写本文时)客户端。下载为SupportPac MQC75。后来的客户端与后级 QMgrs 兼容,并且它们具有更多修复/功能。
  • 安装完整的客户端,而不仅仅是您认为需要的类或程序集。这将为您提供各种实用程序,例如客户端跟踪。
  • 使用amqssslc示例测试您的频道和证书。这通常C:\Program Files (x86)\IBM\WebSphere MQ\tools\c\Samples\Bin\amqssslc.exe是安装完整客户端时提供的实用程序之一。
  • 转至WMQ SupportPacs 页面并查找MH03 WebSphere MQ SSL Configuration CheckerMO04 WebSphere MQ SSL Wizard。这些可以帮助进行配置和问题诊断。
于 2014-04-07T21:22:01.127 回答
3

我发现您不能将非托管安全出口程序集与IBM.XMS API ( IBM.XMS.dll) 一起使用,这就是我目前拥有的。

来自 XMS 文档:

XMSC.WMQ_SECURITY_EXIT

仅当应用程序以受管客户端模式连接到队列管理器时,此属性才相关。此外,仅支持托管出口

最终,我想出了用MQ Classes for .NET(IBM 用于 WMQ 的本机 .NET API)替换 XMS API 的使用,它确实支持使用非托管安全出口,通过设置其MQC.SECURITY_EXIT_PROPERTY属性(应该以表格形式提供)的Hashtable条目)。更具体地说,这是程序集:amqmdnet.dll

于 2014-05-05T06:56:15.230 回答