2012-06-28 44 views
1

我必须创建一个客户端来侦听队列上的消息。 SSL正在使用,我正在开发网点。我浏览了数百页的文档和论坛,发现一些清晰简明的内容,看起来不像是这样!使用SSL设置.Net IBM.XMS客户端

我有一个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); 

EDIT 2

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

+0

可以请提供XMS .NET和MQ的版本详细信息吗? – Shashi

回答

1

好的问题现在已经解决。以下是创建和启动连接的代码摘录。其中一个主要问题是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) 
     { 
     } 
    } 
2

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

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

HTH

+0

请参阅编辑2 –

+0

提供的代码将密码规范声明为“DES_SHA_EXPORT”。我只是通过在关键猜测工作中查看信息来推导出上述规格。 –