【问题标题】:Setting up .Net IBM.XMS client with SSL使用 SSL 设置 .Net IBM.XMS 客户端
【发布时间】:2018-07-10 08:46:54
【问题描述】:

我必须创建一个客户端来监听队列中的消息。正在使用 SSL,我正在点网中开发。我翻阅了数百页的文档和论坛,以找到清晰简洁的内容,但看起来并非如此!

我有一个 jks,我可以远程登录到发布队列的服务器。以下是我到目前为止的代码...

var factoryfactory = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);
var connectionfactory = factoryfactory.CreateConnectionFactory();
connectionfactory.SetIntProperty(XMSC.WMQ_CONNECTION_MODE,XMSC.WMQ_CM_CLIENT_UNMANAGED);

connectionfactory.SetStringProperty(XMSC.WMQ_SSL_KEY_REPOSITORY, @"C:\...\spindev1.key");
connectionfactory.SetStringProperty(XMSC.WMQ_SSL_CIPHER_SPEC, "SHA_WITH_RSA");
connectionfactory.SetStringProperty(XMSC.WMQ_CHANNEL, "SPINDEV1");

var connection = connectionfactory.CreateConnection();

我认为某处必须有密码,但我不知道怎么做。我当前的错误是 2538。

编辑

所以我刚刚添加了 IP 和端口,现在我收到错误代码 2393。

connectionfactory.SetStringProperty(XMSC.WMQ_HOST_NAME, "**.***.***.***");
connectionfactory.SetIntProperty(XMSC.WMQ_PORT, 1431);

编辑 2

好的,现在我已经设法开始使用提供队列数据的人员提供的代码,但是他说,为了使用 SSL 密钥,应用程序必须作为 spindev1 运行 - 这当然意味着创建一个全新帐户?

【问题讨论】:

  • 能否提供 XMS .NET 和 MQ 的版本详情?

标签: .net encryption ibm-mq keystore


【解决方案1】:

对于 XMS .NET,密钥库必须是 CMS 类型,而不是 JKS。 JKS 用于 Java 客户端。 CMS 密钥库将具有“.kdb”作为文件扩展名。因此,请为 XMSC.WMQ_SSL_KEY_REPOSITORY 指定一个 CMS 密钥存储文件名(不带 .kdb 扩展名)。

在您使用的 CipherSpec 中,我在 MQ 中找不到 SHA_WITH_RSA。您能否验证名称是否正确,或者您可以尝试使用不同的密码。

HTH

【讨论】:

  • 提供的代码将密码规范声明为“DES_SHA_EXPORT”。我只是通过查看密钥中的信息推断出上面的规范 - 猜测工作。
  • 这个答案在 2021 年具有误导性! CMS 密钥库仅用于服务器,不用于客户端,并且仅用于非托管客户端,但最新的 Nuget 包仅支持托管。您需要使用 Windows 支持的任何证书格式并将其导入 Windows certmgr。文档没有解释这在 Linux 上的 .NET 上是如何工作的,但大概它使用了 OS 商店。 ibm.com/docs/en/ibm-mq/8.0?topic=client-key-repositories
【解决方案2】:

好的,问题现已解决。下面是创建和启动连接的代码摘录。主要问题之一是 SSL 密钥是为名为 dev1 的用户制作的,而我的用户是 mcanty。如果我知道更多,我相信这个结果会更快到来。

    public SISMQConnection(string connectionFactoryName, string queueName, string sslPeerName,
        string bindingsFilePath, string sslKeyRepository)
    {
        try
        {
            Hashtable aHashtable = new Hashtable { { "XMSC_IC_URL", bindingsFilePath } };
            InitialContext jndi = new InitialContext(aHashtable);

            //Java Naming and Directory Interface (JNDI)
            _queueObject = (IDestination)jndi.Lookup(queueName);
            _queueManager = (IConnectionFactory)jndi.Lookup(connectionFactoryName);

            _queueManager.SetStringProperty(XMSC.WMQ_SSL_PEER_NAME, string.Format("CN=\"{0}\"", sslPeerName));
            _queueManager.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT_UNMANAGED);
            _queueManager.SetStringProperty(XMSC.WMQ_SSL_KEY_REPOSITORY, sslKeyRepository);
            _queueManager.SetStringProperty(XMSC.WMQ_SSL_CIPHER_SPEC, "DES_SHA_EXPORT");
        }
        catch (Exception e)
        {
        }
    }

    public void Connect()
    {
        try
        {
            IConnection QueueConnection = _queueManager.CreateConnection();

            QueueSession = QueueConnection.CreateSession(true, AcknowledgeMode.AutoAcknowledge);

            IMessageConsumer QueueConsumer = QueueSession.CreateConsumer(_queueObject);

            QueueConsumer.MessageListener = OnNewMessageCallback;

            QueueConnection.Start();
        }
        catch (Exception e)
        {
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-04
    • 2017-01-04
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多