C# 使用XMS.NETAPI对抗具有安全出口的安全通道
为了应对WMQ安全通道,我拥有以下发现: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
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。