2
votes

In a spring JMS project, I try to connect to an IBM MQ QUEUE placed in the same place where the spring client is. When the application tries to connect to the MQ server I got the following error:

INFO - Could not refresh JMS Connection for destination 'TI.UNIT1.TRAN.IN' - retrying in 5000 ms. Cause: JMSWMQ2013: L'authentification de la sécurité fournie pour le gestionnaire de files d'attente 'QM_TEST' à l'aide du mode de connexion 'Client' et du nom d'hôte 'localhost' n'était pas valide.; nested exception is com.ibm.mq.MQException: JMSCMQ0001: L'appel WebSphere MQ a échoué avec le code achèvement '2' ('MQCC_FAILED') ; motif '2035' ('MQRC_NOT_AUTHORIZED').
com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: L'authentification de la sécurité fournie pour le gestionnaire de files d'attente 'QM_TEST' à l'aide du mode de connexion 'Client' et du nom d'hôte 'localhost' n'était pas valide. Vérifiez si le nom dutilisateur et le mot de passe fournis sont corrects dans le gestionnaire de files dattente auquel vous vous connectez
    at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:531)
    at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:219)
    at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:410)
    at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:7855)
    at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:7441)
    at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createConnection(JmsConnectionFactoryImpl.java:276)
    at com.ibm.mq.jms.MQConnectionFactory.createCommonConnection(MQConnectionFactory.java:6055)
    at com.ibm.mq.jms.MQQueueConnectionFactory.createQueueConnection(MQQueueConnectionFactory.java:115)
    at org.springframework.jms.listener.DefaultMessageListenerContainer102.createConnection(DefaultMessageListenerContainer102.java:71)
    at org.springframework.jms.listener.AbstractJmsListeningContainer.createSharedConnection(AbstractJmsListeningContainer.java:378)
    at org.springframework.jms.listener.AbstractJmsListeningContainer.refreshSharedConnection(AbstractJmsListeningContainer.java:363)
    at org.springframework.jms.listener.DefaultMessageListenerContainer.refreshConnectionUntilSuccessful(DefaultMessageListenerContainer.java:785)
    at org.springframework.jms.listener.DefaultMessageListenerContainer.recoverAfterListenerSetupFailure(DefaultMessageListenerContainer.java:767)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:898)
    at java.lang.Thread.run(Thread.java:744)
Caused by: com.ibm.mq.MQException: JMSCMQ0001: L'appel WebSphere MQ a échoué avec le code achèvement '2' ('MQCC_FAILED') ; motif '2035' ('MQRC_NOT_AUTHORIZED').
    at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:206)

IBM MQ Server (Windows 64bits) version = 8.0.0.4

Spring JMS application(jars) version = 7.0

Log file (AMQERR01.LOG) content :

----- cmqxrsrv.c : 2321 -------------------------------------------------------
17/02/2017 01:40:20 - Process(6472.10) User(John) Program(amqzlaa0.exe)
                      Host(MyMachine) Installation(Installation1)
                      VRMF(8.0.0.4) QMgr(QM_TEST)

AMQ5540: L'application 'WebSphere MQ Client for Java' n'a pas fourni d'ID
utilisateur et de mot de passe

EXPLICATION :
Le gestionnaire de files d'attente est configuré pour nécessiter un ID
utilisateur et un mot de passe, mais ni l'un ni l'autre n'a été fourni.
ACTION :
Assurez-vous que l'application fournit un ID utilisateur et un mot de passe
valides ou spécifiez FACULTATIF pour la configuration du gestionnaire de files
d'attente afin de permettre aux applications n'ayant pas fourni d'ID
utilisateur et de mot de passe de se connecter. 
----- amqzfuca.c : 4287 -------------------------------------------------------
17/02/2017 01:40:20 - Process(6472.10) User(John) Program(amqzlaa0.exe)
                      Host(MyMachine) Installation(Installation1)
                      VRMF(8.0.0.4) QMgr(QM_TEST)

AMQ5541: L'échec de la vérification de l'authentification a été provoqué par la
configuration CONNAUTH CHCKCLNT(REQDADM) du gestionnaire de files d'attente.

EXPLICATION :
L'ID utilisateur 'john' et son mot de passe ont été vérifiés car l'ID
utilisateur est privilégié et la configuration de l'autorité de connexion du
gestionnaire de files d'attente (CONNAUTH) fait référence à un objet
d'informations d'authentification (AUTHINFO) nommé
'SYSTEM.DEFAULT.AUTHINFO.IDPWOS' avec CHCKCLNT(REQDADM). 

Ce message accompagne une erreur précédente pour expliquer la raison de la
vérification de l'ID utilisateur et du mot de passe.
ACTION :
Pour plus d'informations, reportez-vous à l'erreur précédente. 

Vérifiez que l'application client spécifie un mot de passe et que le mot de
passe est correct pour l'ID utilisateur. La configuration de l'authentification
de la connexion du gestionnaire de files d'attente détermine le référentiel
d'ID utilisateur. Par exemple, la base de données utilisateur du système
d'exploitation local ou un serveur LDAP. 

Pour éviter la vérification de l'authentification, vous pouvez utiliser un ID
utilisateur non privilégié ou changer la configuration d'authentification du
gestionnaire de files d'attente. Vous pouvez modifier l'attribut CHCKCLNT dans
l'enregistrement CHLAUTH, mais vous devez éviter d'autoriser l'accès distant
non authentifié. 
-------------------------------------------------------------------------------
17/02/2017 01:40:21 - Process(11528.7) User(John) Program(amqrmppa.exe)
                      Host(MyMachine) Installation(Installation1)
                      VRMF(8.0.0.4) QMgr(QM_TEST)

AMQ9557: Echec de l'initialisation de l'ID utilisateur du gestionnaire de files
d'attente pour 'John'.

EXPLICATION :
L'appel d'initialisation de l'ID utilisateur 'John' a échoué avec le code
achèvement 2 et le code anomalie 2035.
ACTION :
Corrigez l'erreur et relancez l'opération. 
----- cmqxrsrv.c : 2321 -------------------------------------------------------
17/02/2017 01:40:21 - Process(11528.7) User(John) Program(amqrmppa.exe)
                      Host(MyMachine) Installation(Installation1)
                      VRMF(8.0.0.4) QMgr(QM_TEST)

AMQ9206: Erreur lors de l'envoi de données à l'hôte MyMachine (127.0.0.1).

EXPLICATION :
Une erreur s'est produite lors de l'envoi de données à 'MyMachine (127.0.0.1)'
via TCP/IP. Un incident de communications en est peut-être la cause.
ACTION :
Le code retour provenant de l'appel TCP/IP(send) était 10054 X('2746'). Notez
ces valeurs et informez-en votre administrateur système. 
----- amqccita.c : 3169 -------------------------------------------------------
17/02/2017 01:40:21 - Process(11528.7) User(John) Program(amqrmppa.exe)
                      Host(MyMachine) Installation(Installation1)
                      VRMF(8.0.0.4) QMgr(QM_TEST)

AMQ9999: Le canal 'SYSTEM.ADMIN.SVRCONN' vers l'hôte '127.0.0.1' s'est terminé
anormalement.

EXPLICATION :
Le programme du canl s'exécutant sous l'ID processus 11528(876) pour le canal
'SYSTEM.ADMIN.SVRCONN' a pris fin anormalement. Le canal est '127.0.0.1'. Dans
certains cas, son nom ne peut pas être déterminé et il est représenté par
'????'.
ACTION :
Examinez les messages d'erreur précédents du programme de canal dans les
journaux des erreurs afin de déterminer la cause de l'incident. Notez que ce
message peut être totalement exclus ou supprimé en réglant les attributs
"ExcludeMessage" ou "SuppressMessage" sous la strophe "QMErrorLog" dans le
fichier qm.ini. D'autres informations figurent dans le guide d'administration
du système. 
----- amqrmrsa.c : 930 --------------------------------------------------------
1
Look in the queue manager's AMQERR01.LOG file for a error that corresponds to the client error. What Version of MQ are the JMS jar files from? What version of MQ is the queue manager at? Depending on the version of MQ on the server the 2035 could be caused by CHLAUTH blocking the connection, CONNAUTH blocking the connection, or because of a MQ permission issue (OAM). Please update (edit) the question with the new details.JoshMc
Thank you @JoshMc for your help!Mac
Actually this time I'm a little bit confused about what to do exactly, because I'm new in the IBM MQ world :)Mac
Summary is that your are being blocked because MQ is expecting a valid password to be sent for user john. The last part of my answer has some recommendations. If you want to explore any of those topics it would be better to open a separate question for each topic you have questions about.JoshMc
Ok @JoshMc, I appreciate your help.Mac

1 Answers

3
votes

In MQ v8.0 IBM introduced CONNAUTH which by default points to a AUTHINFO object SYSTEM.DEFAULT.AUTHINFO.IDPWOS. This object by default has the CHCKCLNT attribute set to REQDADM. REQDADM means that any user connecting to a SVRCONN channel that has MQ administrative authority must provide a valid password. This would be a user that for example is in the mqm group.

Below is what the error you received in the AMQERR01.LOG looks like in english:

AMQ5541: The failed authentication check was caused by the queue manager
CONNAUTH CHCKCLNT(REQDADM) configuration.
EXPLANATION: The user ID 'john' and its password were checked because the
user ID is privileged and the queue manager connection authority (CONNAUTH)
configuration refers to an authentication information (AUTHINFO) object
named 'SYSTEM.DEFAULT.AUTHINFO.IDPWOS' with CHCKCLNT(REQDADM). This message
accompanies a previous error to clarify the reason for the user ID and
password check.

With your spring config you should be able to pass a username and password to MQ to authenticate. By default the SYSTEM.DEFAULT.AUTHINFO.IDPWOS object will be set to check the password against the operating system.

If your application does not require MQ administrative authority it would be advised to use a userid that does not have MQ administrative authority and grant that user the specific OAM permissions that it needs to access the queue manager and queues required.

MQ v7.0 JMS jar files can send a username and password but they are limited to 12 characters each, the password is also sent in the clear over the network between the client and queue manager. MQ v8.0 and later can send username and password that are longer than 12 characters and also take advantage of password protection which encrypts the password with 3DES while being sent over the network if you turn off MQ compatibility mode. Also note that MQ v7.0 has been out of support from IBM since September 30th 2015.

@MoragHughson has written a nice IBM developerWorks MQdev Blog titled " Getting going without turning off MQ Security" that explains how to keep this security enabled and would be a good starting point. I would suggest that if you have any further specific questions about CONNAUTH, OAM, or Spring configurations to send username and password that you post additional specific questions and tag them with [] along with any other tags that are appropriate like [], etc.