使用SSL设置.Net IBM.XMS客户端

时间:2012-06-28 14:42:48

标签: .net encryption ibm-mq keystore

我必须创建一个客户端来侦听队列中的消息。正在使用SSL,我正在使用dot net开发。我已经浏览了数百页的文档和论坛,以找到清晰简洁的内容,看起来就像是不是那样!

我有一个jks,我能够telnet到正在发布队列的服务器。以下是我到目前为止的代码......

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运行 - 这肯定意味着创建一个全新的帐户?

2 个答案:

答案 0 :(得分:2)

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

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

HTH

答案 1 :(得分: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)
        {
        }
    }