C# 使用XMS.NETAPI对抗具有安全出口的安全通道

C# 使用XMS.NETAPI对抗具有安全出口的安全通道,c#,security,ibm-mq,xms,C#,Security,Ibm Mq,Xms,为了应对WMQ安全通道,我拥有以下发现: 在WMQ场中定义 公钥/私钥 非托管程序集 我的问题是如何利用这些资源并使用XMS API与安全通道交互?(使用C#) 这是我迄今为止尝试过的,但没有成功: private IConnectionFactory CreateConnectionFactory() { XMSFactoryFactory factoryFactory = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ); IConnec

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

  • 在WMQ场中定义
  • 公钥/私钥
  • 非托管程序集
  • 我的问题是如何利用这些资源并使用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,原因:2195。在期间 指定方法的执行另一个方法引发异常 组成部分。有关详细信息,请参见链接的异常

    更新:

    我发现以下技术说明描述了我的问题及其可能的(未测试)解决方案:


    很好,你找到了那个技术说明。还要确保

    • 如果执行相互身份验证(SVRCONN通道设置为
      SSLCAUTH(必需)
      ),则应用程序的个人证书将被删除。例如,如果应用程序以
      dotnetacct
      运行,则其密钥库中的个人证书标签将为
      ibmwebspheremqdotnetacct
    • 让通道在没有SSL或先退出的情况下运行。然后执行服务器身份验证SSL,然后执行相互身份验证SSL,然后将出口添加回。这就隔离了问题
    • 使用最新的WMQ客户端。我指的不是v7.0或v7.1的最新补丁包,而是最新的v7.5(在撰写本文时)客户端。下载为。以后的客户端与后台QMgrs兼容,它们有更多的修复程序/功能
    • 安装完整的客户端,而不仅仅是您认为需要的类或程序集。这将为您提供各种实用程序,例如客户端跟踪
    • 使用
      amqsslc
      示例测试您的频道和证书。这通常位于
      C:\ProgramFiles(x86)\IBM\WebSphere MQ\tools\C\Samples\Bin\amqsslc.exe
      ,是安装完整客户端时提供的实用程序之一
    • 去商店找和。这些可以帮助配置和问题诊断

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

    从XMS文档:

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


    最后,我提出用(IBM针对WMQ的本机.NET API)替换XMS API的用法,该API通过设置其
    MQC.Security\u Exit\u属性(应以
    Hashtable
    entry的形式提供)来支持使用非托管安全出口。更具体地说,这是程序集:
    amqmdnet.dll

    谢谢Rob,当使用安全出口时,我是否需要在构建连接工厂时添加更多属性以支持安全通道?如果是服务器端出口,那么您可以从客户端添加的唯一属性是ID和密码。连接请求自动提供出口可访问的所有其他字段,如证书详细信息。但是,出口也可以是客户端出口,如果您有,答案取决于出口本身。有两种安全出口?可以运行仅服务器端出口,如BlockIP2,也可以运行一对相互通信的出口,一个在服务器上,一个在客户端或远程QMgr。