Сбой вызова IBM MQ с кодом comp ‘2’ (‘MQCC_FAILED’) причина ‘2035’ (‘MQRC_NOT_AUTHORIZED’) из spring boot

#java #spring-boot #ssl #ibm-mq

#java #весенняя загрузка #ssl #ibm-mq

Вопрос:

мы используем spring boot для отправки сообщения ibm mq manager на удаленном сервере, а для аутентификации мы используем SSL-сертификат мы используем cipher suite для шифрования данных

Вопрос: почему мы получаем эту ошибку, хотя мы не используем учетные данные для аутентификации, а вместо этого используем ssl?

код прост, это метод в основном классе загрузки spring приложения

  @PostConstruct
        public void listen() { 
          System.setProperty("javax.net.debug", "true");
          System.setProperty("javax.net.ssl.trustStore", sslkeyr );
            System.setProperty("javax.net.ssl.keyStore", sslkeyr );
            System.setProperty("javax.net.ssl.keyStorePassword", sslpass );
            System.setProperty("com.ibm.mq.cfg.useIBMCipherMappings", "false");
            System.setProperty("jdk.security.allowNonCaAnchor", "true" );
          System.out.println("start sending message ....");
            //ProducerService producerService=new ProducerService();
            producerService.sendMessage();
            
            System.out.println("start sending message sent success ....");
        }
 

— и это файл свойств

  server.ssl.key-store=/home/user/file.jks
    server.ssl.key-store-password=pass
    server.ssl.key-store-type=JKS
    
    jdk.security.allowNonCaAnchor=true
    
    ibm.mq.queueManager=qmName
    ibm.mq.channel=channel
    ibm.mq.connName=ip(port)
    ibm.mq.sslCipherSuite=TLS_RSA_WITH_AES_256_CBC_SHA256
 

Подсказка: я использовал пример кода ibm ( https://github.com/ibm-messaging/mq-tls-ssl-wizard/blob/master/com.ibm.mq.ssl-wizard/src/tlswizard/samples/SSLSampleJMS.java) с теми же свойствами, конфигурацией и файлом jks
для отправки сообщения (но не с приложением spring boot) и успешного сообщения, отправленного и полученного MQ, но проблема возникает, когда мы использовали spring boot

Комментарии:

1. С 2035 всегда лучше проверить диспетчер очередей AMQERR01.LOG , чтобы узнать, в чем причина. Как server.ssl.key-store-password=pass сопоставляется с System.setProperty("javax.net.ssl.keyStorePassword", sslpass ); ?

2. в журнале отображается то же сообщение, что клиент должен быть уверен в имени пользователя и пароле, @Value(«$ {server.ssl.key-store-password}») частная строка sslpass; @joshMc

3. Прочитайте README для запуска Spring boot. В нем сообщается, что в конфигурации по умолчанию будет использоваться пользователь / пароль по умолчанию, и как вы должны настроить свойства так, чтобы ОНИ НЕ отправлялись, вместо этого явно указав пустого пользователя в свойствах.