未能建立 SSL 通信 b/w 客户端进程和 MQ 系列

failed to establish SSL communication b/w client process and MQ series

根据公司的政策,我们需要加密我们的客户端进程与 MQ 服务器的通信通道 b/w。在我们的分布式系统中,我们有几个 Java 进程需要与 MQ 建立连接。让我说,进程A和B。

A 和 B 运行 在不同的虚拟机上。它们具有完全相同的环境,包括相同版本 (1.8.0_151-b12) 的 JRE、相同的依赖项、相同的 JCE 扩展文件。我们在每个进程的启动脚本中加入了ssl相关的JVM参数,比如

-Djavax.net.ssl.trustStore
-Djavax.net.ssl.trustStorePassword
-Djavax.net.ssl.keyStore
-Djavax.net.ssl.keyStorePassword

相应的 trustStore 和 keyStore 文件已到位并已正确引用。

A 工作正常,我们观察到 SSL 握手和加密消息。但是,进程 B 失败并显示如下消息:

ignoring unavailable cipher TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
...
Caused by: java.lang.IllegalArgumentException: Cannot support 
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA with currently installed providers

我确实花时间在网上查了一下,一个相关的 post 来自 here:它建议下载和升级 JCE 文件——问题是我已经安装了 JCE 文件(无限制),那些这两个过程是相同的。我不认为 JCE 文件是问题的根源。

我的问题是,MQ 团队是否也必须安装 JCE 文件,以便客户端建立 SSL 连接?我这边配置完成了吗,有什么遗漏的吗?

更新:问题已解决。请参阅下面我的评论。

在 1.8.0_162 之前,默认情况下不包含和启用无限强度管辖政策文件(crypto.policy 设置为无限制)。在 1.8。0_151 包含但未启用无限强度管辖策略文件。

请检查您实际上 运行 Java 1.8.0_151-b12 在两个 VM 上,如果您确实 java 安全文件 crypto.policy 工作 VM 上的设置与 non-working VM 相同。