Не удается подключиться к каналу IBM MQ из .net core client

#.net-core #ibm-mq

#.net-core #ibm-mq

Вопрос:

Я настроил ssl для имени диспетчера очередей «QMA» и канала с именем «QMACLCHL». Просто установите метку сертификата и имя чипа. Для диспетчера очередей также задайте путь к хранилищу ключей (значение по умолчанию). В этом каталоге сгенерирован файл .kbd и сохраненный файл пароля. С помощью таких команд:

 cd /var/mqm/qmgrs/QMA/ssl
runmqakm -keydb -create -db key.kdb -pw ********* -stash
runmqakm -cert -create -db key.kdb -label certqma -stashed -size 2048 -sigalg SHA512WithRSA -dn CN=QMA
runmqakm -cert -extract -db key.kdb -label certqma -file qma.arm -stashed
runmqakm -cert -add -db key.kdb -lable "QMA" -file /var/mqm/qmgrs/QMA/ssl/qma.arm -format ascii -stashed
  

Затем скопировал этот файл на другой компьютер и попытался подключиться к диспетчеру очередей по протоколу SSL. Мой .net-код выглядит следующим образом:

 Hashtable properties = new Hashtable();
properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);
properties.Add(MQC.MQCA_SSL_KEY_REPOSITORY, "E:\workspace ttttt\test_projects\IBMMQ\Receiver\ssl\key");
properties.Add(MQC.SSL_CERT_STORE_PROPERTY, "E:\workspace ttttt\test_projects\IBMMQ\Receiver\ssl"); ;
properties.Add(MQC.MQCACH_SSL_CIPHER_SUITE, "TLS_RSA_WITH_AES_128_CBC_SHA256");


properties.Add(MQC.SSL_CIPHER_SPEC_PROPERTY, "TLS_RSA_WITH_AES_128_CBC_SHA256");//TLS_RSA_WITH_AES_128_CBC_SHA
properties.Add(MQC.MQCACH_SSL_PEER_NAME, "net_client");
properties.Add(MQC.SSL_RESET_COUNT_PROPERTY, 400000);
properties.Add(MQC.USER_ID_PROPERTY, "mqm");
properties.Add(MQC.HOST_NAME_PROPERTY, "172.19.165.167");
properties.Add(MQC.CHANNEL_PROPERTY, "QMACLCHL");
properties.Add(MQC.CONNECTION_NAME_PROPERTY, "172.19.165.167(1414)");

// create connection
Console.Write("Connecting to queue manager.. ");
MQEnvironment.SSLCertRevocationCheck = false;
//MQEnvironment.SSLCipherSpec = "TLS_RSA_WITH_AES_128_CBC_SHA256";
MQEnvironment.CertificateLabel = "certqma";

queueManager = new MQQueueManager("QMA", properties);
  

Также я настроил переменные среды (MQCHLLIB, MQCHLTAB) для файла конфигурации вкладки. Приведенный выше код генерирует трассировку, как показано ниже, и enven не пытается подключиться:

 Remote Address:172.19.165.167:1414
000001BC 19:37:21.374097   11208.4     Local Address:0.0.0.0:0
000001BD 19:37:21.374139   11208.4     Bind
000001BE 19:37:21.380208   11208.4     Bind returned 0.0.0.0:17040
000001BF 19:37:21.380256   11208.4     Connect
000001C0 19:37:21.382369   11208.4     Connect returned True
000001C1 19:37:21.383946   11208.4     TCP/IP LINGER disabled
000001C2 19:37:21.383997   11208.4     Using socket send buffer size 32768
000001C3 19:37:21.384409   11208.4     Using socket receive buffer size 32768
000001C4 19:37:21.384450   11208.4    -----------}  MQTCPConnection.ConnectUsingLocalAddr(ParsedLocalAddr,IPAddress,int) rc=OK
000001C5 19:37:21.384959   11208.4     Constructing IBM.WMQ.Nmqi.MQEncryptedSocket#004CACA0 MQMBID sn=p912-L190313.DE su=_FGqKtkWOEemwVcDgaesw_A pn=basedotnet/nmqi/NmqiObject.cs
000001C6 19:37:21.384986   11208.4     Constructing IBM.WMQ.Nmqi.MQEncryptedSocket#004CACA0 MQMBID sn=p912-L190313.DE su=_FGqKtkWOEemwVcDgaesw_A pn=basedotnet/nmqi/MQEncryptedSocket_s.cs
000001C7 19:37:21.386449   11208.4    -----------{  MQEncryptedSocket.RetrieveAndValidateSSLParams(MQConnectOptions)
000001C8 19:37:21.387062   11208.4     IBM.WMQ.Nmqi.MQEncryptedSocket#004CACA0 throwing MQException: cc=2 rc=2381
000001C9 19:37:21.388522   11208.4     New MQException CompCode: 2 Reason: 2381
000001CA 19:37:21.399370   11208.4    -----------}! MQEncryptedSocket.RetrieveAndValidateSSLParams(MQConnectOptions) rc=(Unknown(2381))
000001CB 19:37:21.401318   11208.4     CompCode: 2, Reason: 2381
000001CC 19:37:21.401693   11208.4     New MQException CompCode: 2 Reason: 2538
000001CD 19:37:21.405884   11208.4    -----------{  ManagedCommonServices.GetMessage(string objectId,uint returncode,uint control,out string basicmessage,out string extendedmessage,out string replymessage,MQLONG basicLength,MQLONG 
  

Когда я удалил свойство MQC.SSL_CIPHER_SPEC_PROPERTY, приложение попыталось подключиться к серверу, но сервер отклонил соединение с ошибкой:

 AMQ9639E: Remote channel 'QMACLCHL' did not specify a CipherSpec.

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

Я не понимаю, что я делаю не так. Пожалуйста, помогите мне. Спасибо.

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

1. Вы работаете в управляемом или неуправляемом режиме?

2. Извините, я пропустил одну строку. Да, я использую управляемый режим. свойства. Добавить(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);

3. Если вы используете управляемый режим, то вы не можете использовать файлы KDB на основе GSKit и вы не можете использовать CCDT. Прочитайте это: — ibm.com/support/knowledgecenter/en/SSFKSJ_9.0.0 /…

4. @MoragHughson понимаю, что kdb не используется для managed, но почему CCDT не вариант, я думал, что managed может использовать CCDT без проблем?

5. @MoragHughson, я использовал CCDT с управляемым режимом, и он работает нормально, фактически на этой странице даже показано, что он поддерживается для управляемого .NET: ibm.com/support/knowledgecenter/en/SSFKSJ_9.0.0 /. … Также из PMR у меня открыто, где для XMS было сообщено, и ожидается обновление документа о том, что XMSC.WMQ_CCDTURL поддерживается только для управляемого режима XMS.NET .