Jifi вход для Websphere MQ с TLS - PullRequest
       55

Jifi вход для Websphere MQ с TLS

0 голосов
/ 24 октября 2019

Я пытаюсь создать поток nifi с входом JMS для подключения к Websphere MQ, работающему в z / OS. Я могу успешно подключиться, используя JNDI (с файлом .bindings), если администратор очередей не защищен TLS. Я получаю неподдерживаемую ошибку ciphersuite при переключении на безопасный администратор очередей:

Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2393;AMQ9771: SSL handshake failed. [1=java.lang.IllegalArgumentException[Unsupported ciphersuite SSL_RSA_WITH_AES_256_CBC_SHA256],3=10.24.98.154/10.24.98.154:457 (10.24.98.154),4=SSLSocket.createSocket,5=default]
    at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection.makeSocketSecure(RemoteTCPConnection.java:2093)
    at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection.connnectUsingLocalAddress(RemoteTCPConnection.java:870)
    at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection.protocolConnect(RemoteTCPConnection.java:1294)
    at com.ibm.mq.jmqi.remote.impl.RemoteConnection.connect(RemoteConnection.java:892)
    at com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSessionFromNewConnection(RemoteConnectionSpecification.java:416)
    at com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSession(RemoteConnectionSpecification.java:312)
    at com.ibm.mq.jmqi.remote.impl.RemoteConnectionPool.getSession(RemoteConnectionPool.java:146)
    at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1761)
    ... 40 common frames omitted
Caused by: java.lang.IllegalArgumentException: Unsupported ciphersuite SSL_RSA_WITH_AES_256_CBC_SHA256
    at sun.security.ssl.CipherSuite.valueOf(CipherSuite.java:228)
    at sun.security.ssl.CipherSuiteList.<init>(CipherSuiteList.java:79)
    at sun.security.ssl.SSLSocketImpl.setEnabledCipherSuites(SSLSocketImpl.java:2495)
    at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection.makeSocketSecure(RemoteTCPConnection.java:2084)
    ... 47 common frames omitted

Я думаю, что проблема состоит в том, чтобы предоставить переменную -Dcom.ibm.mq.cfg.preferTLS=true процессу nifi. Я пытался добавить его в bootstrap.conf, но это не помогло.

Есть ли какой-либо другой способ добавить переменную -Dcom.ibm.mq.cfg.preferTLS=true в jar-клиент ibm jms? Я действительно застрял с этой проблемой, поэтому любая помощь будет очень полезной. Спасибо

1 Ответ

1 голос
/ 25 октября 2019

Проблема, с которой вы столкнулись, заключается в том, что классы IBM MQ для JMS (com.ibm.mq.allclient.jar) могут работать как с Java JSSE IBM, так и не IBM (например, Oracle). Имена Ciphersuite отличаются между двумя реализациями Java JSSE. По большей части, когда Oracle следует стандартам именования IETF, а префикс набора шифров - TLS_, IBM заменяет его на SSL_.


Таблица, документирующая, как канал IBM MQ SVRCONNCIPHERSPEC сопоставление имен с именем шифровального набора IBM и Oracle Java JSSE можно найти в центре знаний IBM: IBM MQ> Разработка приложений> Разработка приложений JMS и Java> Использование классов IBM MQ для JMS> Написание классов IBM MQ для JMSприложения> Доступ к функциям IBM MQ из классов IBM MQ для приложения JMS> Использование TLS с классами IBM MQ для JMS> TLS CipherSpecs и CipherSuites в классах IBM MQ для JMS

Например, CIPHERSPEC выпри условии, что TLS_RSA_WITH_AES_256_CBC_SHA256 содержит эту запись в таблице.

CipherSpec                      |Equivalent CipherSuite (IBM JRE) |Equivalent CipherSuite (Oracle JRE) |Protocol |FIPS 140-2 compatible |
--------------------------------+---------------------------------+------------------------------------+---------+----------------------|
TLS_RSA_WITH_AES_256_CBC_SHA256 |SSL_RSA_WITH_AES_256_CBC_SHA256  |TLS_RSA_WITH_AES_256_CBC_SHA256     |TLS v1.2 |yes                   |

Вы столкнулись с двумя проблемами:


Во-первых, чтобы сообщить классам IBM MQ для JMS, что вы хотите, чтобы он использовал отображение шифра Oracle, вам нужно установить системное свойство Java com.ibm.mq.cfg.useIBMCipherMappings до значения false (обратите внимание, по умолчанию это true).

Это можно сделать в вашем коде:

System.setProperty("com.ibm.mq.cfg.useIBMCipherMappings", "false");

или в командной строке:

-Dcom.ibm.mq.cfg.useIBMCipherMappings=false

Во-вторых, когда вы используете JMSAdmin для создания файла привязки, он по умолчанию примет указанное вами имя набора шифров и "преобразует" его в имя набора шифров IBM. Поэтому, когда вы указали TLS_RSA_WITH_AES_256_CBC_SHA256, он преобразовал его в SSL_RSA_WITH_AES_256_CBC_SHA256 в полученном файле привязки.

Чтобы исправить это, вам нужно отредактировать JMSAdmin и найти строку, подобную этой:

$AMQJAVA -Dcom.ibm.msg.client.commonservices.log.outputName=$MQ_JAVA_DATA_PATH/log -Dcom.ibm.msg.client.commonservices.trace.outputName=$MQ_JAVA_DATA_PATH/trace -DMQ_JAVA_INSTALL_PATH=$MQ_JAVA_INSTALL_PATH com.ibm.mq.jms.admin.JMSAdmin $*

Вам нужно будет добавить -Dcom.ibm.mq.cfg.useIBMCipherMappings=false к строке, например:

$AMQJAVA -Dcom.ibm.mq.cfg.useIBMCipherMappings=false -Dcom.ibm.msg.client.commonservices.log.outputName=$MQ_JAVA_DATA_PATH/log -Dcom.ibm.msg.client.commonservices.trace.outputName=$MQ_JAVA_DATA_PATH/trace -DMQ_JAVA_INSTALL_PATH=$MQ_JAVA_INSTALL_PATH com.ibm.mq.jms.admin.JMSAdmin $*

Исправление первой проблемы позволит IBM MQ Classes for JMS использовать сопоставления шифровальных пакетов Oracle.

Исправление второй проблемы позволит создать файл привязки, содержащийправильное имя шифра Oracle.


В настоящее время возвращается ошибка RC=2393, что означает MQRC_SSL_INITIALIZATION_ERROR, это связано с тем, что классы IBM MQ для Java считают, что должны использовать сопоставления шифра IBM, и отправляют шифровальный набор SSL_RSA_WITH_AES_256_CBC_SHA256имя Oracle Java, которое затем возвращает ошибку, которую вы получаете, Unsupported ciphersuite SSL_RSA_WITH_AES_256_CBC_SHA256, потому что Oracle Java не знает о шифрованном наборе с таким именем.

Обратите внимание, что если вы хотите исправить только одну из двух проблем,затем классы IBM MQ для JMS вернут RC=2400, что означает MQRC_UNSUPPORTED_CIPHER_SUITE, прежде чем даже вызвать Java JSSE.

...