Problema de handshake IBM MQIPT SSL
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.
- 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)
- 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
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ê:
- Servidor TLS (você está recebendo a conexão de entrada e descriptografando-a)
- 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*.