Problema de handshake IBM MQIPT SSL

Oct 09 2020

Estamos conectando o cliente Java MQ ao servidor IBM MQ do cliente. Para conectar, temos uma instância MQIPT nas instalações da nuvem e uma instância do MQIPT nas instalações fora da nuvem. Depois de desabilitar a segurança SSL em instalações fora da nuvem, podemos conectá-la. No entanto, uma vez que SSL habilitado por instalações fora da nuvem, enfrentamos o problema de handshake SSL. Os certificados são compartilhados entre nós.

Não temos acesso a esse ambiente sem nuvem.

Estamos conectando o MQIPT pelo cliente Java. e abaixo estão o rastreamento que estamos obtendo no rastreamento mqipt.

  1. Quando não estamos definindo cifra no cliente java mq, obtemos o erro abaixo

Nesse caso, o MQIPT ativado para todas as cifras.

Issuer: 'CN=********* TEST CA ****,OU=*****,O=******** AG,C=******'
12:45:13.799    27   1414-2s         Processing keyType: RSA
12:45:13.800    27   1414-2s         No RSA certificates in keyring
12:45:13.800    27   1414-2s         Processing keyType: DSA
12:45:13.800    27   1414-2s         No DSA certificates in keyring
12:45:13.800    27   1414-2s         Processing keyType: EC
12:45:13.800    27   1414-2s         No EC certificates in keyring
12:45:13.800    27   1414-2s         WARNING: No suitable certificate to send to the remote server
12:45:13.800    27   1414-2s         --------} IPTX509KeyManager.chooseClientAlias() rc=0
12:45:14.184    27   1414-2s         SSLHandshakeException handshaking:com.ibm.jsse2.k.a(k.java:7)
  1. Mas quando configuramos CipherSuite no cliente Java MQ, estamos obtendo logs de erros no mqipt
MQCPI014 Protocol eyecatcher (16030300) not recognized

Versão MQIPT -> IBM MQ Internet Pass-Thru V9.2.0.1

MQIPT conf como abaixo

[global]
CommandPort=1884
RemoteShutDown=true
MinConnectionThreads=5
MaxConnectionThreads=100
IdleTimeout=20
ClientAccess=true
QMgrAccess=true
HTTP=true
HTTPChunking=false
Trace=5
ConnectionLog=true
MaxLogFileSize=50

[route]
Name=Route_1
Active=true
ListenerPort=1414
Destination=mq-dmz-************
DestinationPort=********
HTTP=true
HTTPS=true
SSLClient=true
SSLClientProtocols=TLSv1.2
SSLClientKeyRing="path of key ring PFX file"
SSLClientKeyRingPW="path of password file"
HTTPServer=<Http Server name>
HTTPServerPort=443
URIName=<URI name>
SSLClientCAKeyRing="same as SSLClientKeyRing"
SSLClientCAKeyRingPW="same as SSLClientKeyRingPW"
SSLClientCipherSuites=SSL_ECDHE_RSA_WITH_AES_256_GCM_SHA384

Respostas

1 JoshMc Oct 13 2020 at 17:03

A configuração para aceitar a conexão do cliente MQ, descriptografar e, em seguida, recriptografar e enviar para o próximo salto deve ser semelhante ao seguinte:

[route]
Name=Route_1
Active=true
ListenerPort=1414
Destination=mq-dmz-************
DestinationPort=********
HTTP=true
HTTPS=true
SSLClient=true
SSLClientProtocols=TLSv1.2
SSLClientKeyRing="path of key ring PFX file"
SSLClientKeyRingPW="path of password file"
HTTPServer=<Http Server name>
HTTPServerPort=443
URIName=<URI name>
SSLClientCAKeyRing="same as SSLClientKeyRing"
SSLClientCAKeyRingPW="same as SSLClientKeyRingPW"
SSLClientCipherSuites=SSL_ECDHE_RSA_WITH_AES_256_GCM_SHA384
SSLServer=true
SSLServerProtocols=TLSv1.2
SSLServerKeyRing="path of key ring PFX file"
SSLServerKeyRingPW="path of password file"
SSLServerCAKeyRing="same as SSLServerKeyRing"
SSLServerCAKeyRingPW="same as SSLServerCAKeyRing"
SSLServerCipherSuites=SSL_ECDHE_RSA_WITH_AES_256_GCM_SHA384

O que está faltando é que a rota seja configurada do ponto de vista da sessão TLS, você:

  1. Servidor TLS (você está recebendo a conexão de entrada e descriptografando-a)
  2. Cliente TLS (você está se conectando a outro gerenciador de filas ou MQIPT e criptografando)

Para aceitar uma conexão TLS de seu aplicativo cliente MQ, você precisa configurar os SSLServer*equivalentes para as configurações já definidas SSLClient*.