ปัญหา IBM MQIPT SSL Handshake

Oct 09 2020

เรากำลังเชื่อมต่อไคลเอ็นต์ java MQ กับเซิร์ฟเวอร์ IBM MQ ของลูกค้าเพื่อเชื่อมต่อว่าเรามีอินสแตนซ์ MQIPT หนึ่งรายการที่สถานที่บนคลาวด์และหนึ่งอินสแตนซ์ MQIPT ที่สถานที่ที่ไม่ใช่ระบบคลาวด์ เมื่อปิดใช้งานการรักษาความปลอดภัย SSL ในสถานที่ที่ไม่ใช่ระบบคลาวด์แล้วเราจะสามารถเชื่อมต่อได้ อย่างไรก็ตามเมื่อเปิดใช้ SSL โดยสถานที่ที่ไม่ใช่ระบบคลาวด์เรากำลังประสบปัญหา SSL handshake มีการแบ่งปันใบรับรองระหว่างเรา

เราไม่สามารถเข้าถึงสภาพแวดล้อมที่ไม่ใช่ระบบคลาวด์นั้นได้

เรากำลังเชื่อมต่อ MQIPT โดยไคลเอนต์ Java และด้านล่างนี้คือร่องรอยที่เราได้รับในการติดตาม mqipt

  1. เมื่อเราไม่ได้ตั้งค่าการเข้ารหัสที่ไคลเอนต์ mq java เราจะได้รับข้อผิดพลาดด้านล่าง

ในกรณีนั้น MQIPT เปิดใช้งานสำหรับการเข้ารหัสทั้งหมด

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. แต่เมื่อเราตั้งค่า CipherSuite ในไคลเอนต์ java MQ เราจะได้รับบันทึกข้อผิดพลาดใน mqipt
MQCPI014 Protocol eyecatcher (16030300) not recognized

เวอร์ชัน MQIPT -> IBM MQ Internet Pass-Thru V9.2.0.1

MQIPT conf ดังต่อไปนี้

[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

คำตอบ

1 JoshMc Oct 13 2020 at 17:03

การตั้งค่าเพื่อยอมรับการเชื่อมต่อจากไคลเอนต์ MQ ถอดรหัสแล้วเข้ารหัสใหม่และส่งไปยังฮอปถัดไปควรมีลักษณะดังนี้:

[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

สิ่งที่คุณขาดหายไปคือเส้นทางถูกกำหนดค่าจากมุมมองของเซสชัน TLS คุณเป็นอย่างใดอย่างหนึ่ง:

  1. TLS Server (คุณได้รับการเชื่อมต่อขาเข้าและถอดรหัส)
  2. ไคลเอนต์ TLS (คุณกำลังเชื่อมต่อกับตัวจัดการคิวอื่นหรือ MQIPT และเข้ารหัส)

ที่จะยอมรับการเชื่อมต่อ TLS จากโปรแกรมไคลเอนต์ MQ ของคุณคุณต้องกำหนดค่าSSLServer*เทียบเท่ากับการกำหนดค่าSSLClient*การตั้งค่า