我正在尝试创建与启用了 ssl 身份验证的 mq 管理器的连接。我正在使用Java 1.8
我有这个代码
TrustStrategy trustStrategy = new TrustSelfSignedStrategy();
KeyStore trustStore = KeyStore.getInstance("JKS");
try (FileInputStream fileInputStream = new FileInputStream(propertyReader.getProperty(QUEUE_KEYSTORE))) {
trustStore.load(fileInputStream, propertyReader.getProperty(QUEUE_KEYSTOREPASS).toCharArray());
}
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(trustStore, "changeit".toCharArray());
final TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(trustStore);
final SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), new SecureRandom());
connectionFactory.setTransportType(WMQConstants.WMQ_CM_CLIENT);
connectionFactory.setHostName(propertyReader.getProperty(QUEUE_HOST));
connectionFactory.setQueueManager(propertyReader.getProperty(QUEUE_MANAGER));
connectionFactory.setChannel(propertyReader.getProperty(QUEUE_CHANNEL));
connectionFactory.setSSLCipherSuite(propertyReader.getProperty(QUEUE_CIPHERSUITE));
connectionFactory.setPort(Integer.parseInt(propertyReader.getProperty(QUEUE_PORT)));
connectionFactory.setSSLSocketFactory(sslContext.getSocketFactory());
Run Code Online (Sandbox Code Playgroud)
当我尝试创建连接时出现此异常:
com.ibm.mq.MQException: MQJE001: Completion Code 2, Reason 2397
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
Run Code Online (Sandbox Code Playgroud)
我可以在日志中看到以下内容:
Allow unsafe renegotiation: false
Allow legacy hello messages: true
Is initial handshake: true
Is secure renegotiation: false
Ignoring unsupported cipher suite: TLS_RSA_WITH_AES_256_CBC_SHA256 for TLSv1
No available cipher suite for TLSv1
handling exception: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
SEND TLSv1.2 ALERT: fatal, description = handshake_failure
WRITE: TLSv1.2 Alert, length = 2
[Raw write]: length = 7
0000: 15 03 03 00 02 02 28 ......(
called closeSocket()
Run Code Online (Sandbox Code Playgroud)
这是不是说它还在尝试使用TLSv1而不是TLCv1.2?我的安全文件中启用了 jce 无限强度。
更新详细信息:
IBM MQ Jar 版本:6.0.2.5
java版本“1.8.0_201”
Java(TM) SE 运行时环境(内部版本 1.8.0_201-b26)
您已声明您正在使用 v6.0.2.5 中的 IBM MQ jar 文件,该文件已于 2012 年 9 月 30 日不再获得 IBM 的支持。有关该旧版本中仅支持的 CipherSuites 的更多详细信息,请参阅此问题的结尾。
\n\n您可以使用 Maven 通过以下链接获取当前的 IBM MQ v9.1.0.4 LTS 支持客户端:
\n\nMVN 存储库 \xc2\xbb com.ibm.mq com.ibm.mq.allclient
\n\n我检查了保存为 PDF 的旧文档,MQ v6 仅支持 SSL 和 TLS1.0 密码,列表如下:
\n\nSSL_RSA_WITH_NULL_MD5\nSSL_RSA_WITH_NULL_SHA\nSSL_RSA_EXPORT_WITH_RC4_40_MD5\nSSL_RSA_WITH_RC4_128_MD5\nSSL_RSA_WITH_RC4_128_SHA\nSSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5\nSSL_RSA_WITH_DES_CBC_SHA\nSSL_RSA_EXPORT1024_WITH_RC4_56_SHA\nSSL_RSA_EXPORT1024_WITH_DES_CBC_SHA\nSSL_RSA_WITH_3DES_EDE_CBC_SHA\nSSL_RSA_WITH_AES_128_CBC_SHA\nSSL_RSA_WITH_AES_256_CBC_SHA\nSSL_RSA_WITH_DES_CBC_SHA\nSSL_RSA_WITH_3DES_EDE_CBC_SHA\nSSL_RSA_FIPS_WITH_DES_CBC_SHA\nSSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
26094 次 |
| 最近记录: |