Impossible de se Connecter avec Websphere MQ SSL Canal via JNDI

Mon JMS client se connecte à WMQ via JNDI. Le contexte initial d'usine est utilisé com.ibm.mq.jms.context.WMQInitialContextFactory.

Actuellement, à WMQ côté, il y a un gestionnaire de file d'attente appelée TestMgr. En vertu de ce gestionnaire de file d'attente, j'ai créé deux canaux. On est PLAIN.CHL qui ne permet pas de spécifier un algorithme de Chiffrement Spec, l'autre est SSL.CHL configuré SSL Cipher Spec avec RC4_MD5_US et l'Authentification SSL avec Optional.

J'ai créé un magasin de clés pour le gestionnaire de file d'attente à l'aide d'IBM outil de Gestion Clé. Le chemin de la clé de db est [wmq_home]\qmgrs\TestMgr\ssl\key.

Pour le canal PLAIN.CHL, j'ai défini une file d'attente de connexion usine comme:

DEF QCF(PlainQCF) QMANAGER(TestMgr) CHANNEL(PLAIN.CHL) HOST(192.168.66.23) PORT(1414)   TRANSPORT(client)

Et sous le canal SSL SSL.CHL, j'ai défini une file d'attente de connexion usine comme:

DEF QCF(SSLQCF) QMANAGER(TestMgr) CHANNEL(SSL.CHL) HOST(192.168.66.23) PORT(1414) TRANSPORT(client) SSLCIPHERSUITE(SSL_RSA_WITH_RC4_128_MD5)

Maintenant, je ne peux que créer une connexion à l'aide de la PlainQCF. Mais pas le SSL connexion de file d'attente de l'usine. Mon code ressemble à ceci:

 Hashtable environment = new Hashtable();
    environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.mq.jms.context.WMQInitialContextFactory");
    environment.put(Context.PROVIDER_URL, "192.168.66.23:1414/SSL.CHL");
    Context ctx = new InitialContext( environment );
    QueueConnectionFactory qcf = (QueueConnectionFactory) ctx.lookup("SSLQCF");
    qcf.createConnection();
    ....

Suis-je en manquant de certaines propriétés de contexte lors de la recherche de l'SSL usine? connexion Et puis j'ai trouvé le code est suspendu sur la ligne new InitialContext( environment ) pendant une longue période, de près de 5 minutes et je suis CC=2;RC=2009;AMQ9208... erreur.

Toute suggestion serait la bienvenue. Est-il vrai que canal SSL ne peut pas être relié par JNDI?


@T. Rob, merci pour votre réponse très bien. Mais nous voulons encore utiliser WMQInitialContextFactory, donc j'ai peur, j'ai encore besoin de trouver une solution pour ce.

J'ai défini la fabrique de connexion une fois. De l'affichage de l'info pour le SSL connexion de file d'attente de l'usine comme:

InitCtx> DISPLAY QCF(SSLQCF)
ASYNCEXCEPTION(ALL)
CCSID(819)
CHANNEL(SSL.CHL)
CLIENTRECONNECTOPTIONS(ASDEF)
CLIENTRECONNECTTIMEOUT(1800)
COMPHDR(NONE )
COMPMSG(NONE )
CONNECTIONNAMELIST(192.168.66.23(1414))
CONNOPT(STANDARD)
FAILIFQUIESCE(YES)
HOSTNAME(192.168.66.23)
LOCALADDRESS()
MAPNAMESTYLE(STANDARD)
MSGBATCHSZ(10)
MSGRETENTION(YES)
POLLINGINT(5000)
PORT(1414)
PROVIDERVERSION(UNSPECIFIED)
QMANAGER(TestMgr)
RESCANINT(5000)
SENDCHECKCOUNT(0)
SHARECONVALLOWED(YES)
SSLCIPHERSUITE(SSL_RSA_WITH_RC4_128_MD5)
SSLFIPSREQUIRED(NO)
SSLRESETCOUNT(0)
SYNCPOINTALLGETS(NO)
TARGCLIENTMATCHING(YES)
TEMPMODEL(SYSTEM.DEFAULT.MODEL.QUEUE)
TEMPQPREFIX()
TRANSPORT(CLIENT)
USECONNPOOLING(YES)
VERSION(7)
WILDCARDFORMAT(TOPIC_ONLY)

JNDI Fournisseur devrait être bien parce que j'ai peut rechercher de la plaine de l'usine de raccordement avec succès. Aussi, pour mon client app, j'ai extrait le cert de la clé de stockage qui a créé pour MQ server et importé à la banque de confiance(le fichier cacerts) de mon JRE avec le nom de l'alias ibmwebspheremqtestmgr.

Vous sont corrects, avec erreur de 2009 il y a quelques entrées de journal:

=================================================================

4/20/2012 20:24:27 - Process(13768.3) User(MUSR_MQADMIN) Program(amqzmur0.exe)
                      Host(xxxx_host of my MQ) Installation(mqenv)
                      VRMF(7.1.0.0) QMgr(TestMgr)                
AMQ6287: WebSphere MQ V7.1.0.0 (p000-L111019).
EXPLANATION:
WebSphere MQ system information: 
Host Info         :- Windows Server 2003, Build 3790: SP2 (MQ Windows 32-bit) 
Installation      :- C:\IBM\WebSphereMQ (mqenv) 
Version           :- 7.1.0.0 (p000-L111019)
ACTION:
None. 

-------------------------------------------------------------------------------
4/20/2012 20:24:27 - Process(7348.116) User(MUSR_MQADMIN) Program(amqrmppa.exe)
                      Host(xxxx_host of my MQ) Installation(mqenv)
                      VRMF(7.1.0.0) QMgr(TestMgr)
AMQ9639: Remote channel 'SSL.CHL' did not specify a CipherSpec.

EXPLANATION:
Remote channel 'SSL.CHL' did not specify a CipherSpec when the local channel
expected one to be specified. 

The remote host is 'xxx_host of my app (192.168.66.25)'. 
The channel did not start.

ACTION:
Change the remote channel 'SSL.CHL' on host 'xxx_host of my app (192.168.66.25)' to
specify a CipherSpec so that both ends of the channel have matching
CipherSpecs.

----- amqcccxa.c : 3817 -------------------------------------------------------
4/20/2012 20:24:27 - Process(7348.116) User(MUSR_MQADMIN) Program(amqrmppa.exe)
                      Host(my app host) Installation(mqenv)
                    VRMF(7.1.0.0) QMgr(TestMgr)                    
AMQ9999: Channel 'SSL.CHL' to host 'xxx_host of my app (192.168.66.25)' ended
abnormally.

====================================================================

J'ai aussi eu une certaine confusion avec le journal des erreurs. Mon application est mise en scène à une machine qui est différent de mon MQ. Mais le journal dit que le Change the remote channel 'SSL.CHL' on host 'xxx_host of my app (192.168.66.25)' to
specify a CipherSpec so that both ends of the channel have matching
CipherSpecs.
Comment puis-je changer le canal cipher spec sur mon application hôte?


mises à jour sur MQEnvironment...

répondre aux commentaires.

La valeur de MQEnvironment.sslCipherSuite est nulle, de sorte qu'il jette NullPointerExcetpion quand je l'ai mis à l'env de table de hachage. Mais j'ai essayé un autre environment.put(MQC.SSL_CIPHER_SUITE_PROPERTY, "SSL_RSA_WITH_RC4_128_MD5") et elle n'a toujours pas avec 2009 erreur.

Pour JMSAdmin outil, j'avais changé la config à utiliser WMQInitialContextFactory. La configuration comme celle-ci(JMSAdmin.config):

INITIAL_CONTEXT_FACTORY=com.ibm.mq.jms.context.WMQInitialContextFactory
PROVIDER_URL=192.168.66.23:1414/SYSTEM.DEF.SVRCONN

Le reste de la configuration des feuilles en tant que par défaut.

Veuillez noter, ici, j'utilise le canal par défaut SYSTEM.DEF.SVRCONN afin que je puisse connexion à la console d'administration. Si je change le canal SSL unSSL.CHL, je ne peux pas de connexion à l'admin console. L'erreur qui s'est passé ici est le même que dans mon application client.

Une autre précision, dans mon client, j'utilise le code ci-dessous peut se connecter à connecter qmgr(TestMgr) avec succès à travers le canal SSL.CHL.

   MQConnectionFactory factory = new MQConnectionFactory();
    factory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
    factory.setQueueManager("TestMgr");
    factory.setSSLCipherSuite("SSL_RSA_WITH_RC4_128_MD5");
    factory.setPort(1414);
    factory.setHostName("192.168.66.23");
    factory.setChannel("SSL.CHL");

    MQConnection connection = (MQConnection) factory.createConnection();

Et maintenant le problème est juste comme vous l'avez dit, c'est le contexte initial a échoué connecter à qmgr par canal SSL. L'option(use plain channel for initial context and ssl channel for connection factory) que vous avez fourni fonctionne aussi. Mais je veux toujours savoir comment obtenir contexte initial avec canal ssl travail. Merci pour votre patience et beaucoup. Vos mises à jour seront appréciées.

grâce

  • bonjour, voir ma réponse ci-dessous.
  • La seule chose qui manque dans votre mise à jour de la configuration de l'WMQ Contexte Initial. Votre QCF est clairement un cipherspec donc, si elle avait été utilisée et ne correspond pas à la QMgr de réglage que vous voyez une erreur différente. L'erreur que vous voyez m'amène à croire que le WMQ Initiale Contect est aussi de tenter de frapper SSL.LCH. Vous pouvez poster ces paramètres de configuration?
  • Oh, je pensais que le WMQ Contexte Initial est construit en WMQ naturellement et l'utilisateur n'a pas besoin de configurer ce Contexte Initial de plus. Il semble que j'avais tort. Je vais essayer de le configurer. Si possible, pouvez-vous m'indiquer comment configurer WMQ Contexte Initial?
  • Mise à jour de réponse ci-dessous. En bref, le WMQInitialContextFactory est configuré pour utiliser le canal SSL mais qui n'ont pas la configuration SSL. Vous aurez besoin d'utiliser la norme env vars pour définir la ciphersuite et l'emplacement du fichier de stockage des clés. Les détails ci-dessous.
  • Merci pour votre mise à jour. Je comprends beaucoup pour votre réponse. Veuillez voir ma mise à jour "mises à jour sur MQEnvironment" suivi dans ma question.
  • Salut, tout d'autres idées sur l'utilisation de ssl pour le contexte initial de l'usine?

InformationsquelleAutor zgcharley | 2012-04-20