java - 无法建立 SSL 通信黑白客户端进程和 MQ 系列

标签 java ssl encryption ibm-mq

根据公司的政策,我们需要使用 MQ 服务器对客户端进程的通信 channel 进行加密。在我们的分布式系统中,我们需要一些 Java 进程来与 MQ 建立连接。让我说,进程A和B。

A 和 B 运行在不同的虚拟机上。它们具有完全相同的环境,包括相同版本的 JRE(1.8.0_151-b12)、相同的依赖项、相同的 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

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

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

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

最佳答案

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

请检查您是否确实在两台虚拟机上运行 Java 1.8.0_151-b12,如果是的话,请确保工作虚拟机上的 java 安全文件 crypto.policy 设置与非工作虚拟机相同。

关于java - 无法建立 SSL 通信黑白客户端进程和 MQ 系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63707735/

相关文章:

javascript - 如何在客户端(AngularJS)加密密码,将其发送到服务器(expressJS)并在服务器上解密?

http - 在 http 站点的 iframe 中加载 https 站点

java - GWT 2.4 : Uibinder, Stacklayoutpanel,<g:stack> 和高度

java - 为什么 map 变换是窄的?

java - 如何在图像上打印水平线并添加 "thickness"?

node.js - 如何使用 Node 配置ssl

java - 每次转到 Activity 都会增加 Android 中 AndroidDevMetrics 中的实例计数

ssl - 购买 DNSimple SSL 证书以使其与 Heroku ssl 插件一起使用时,我应该在主机名中输入什么?

perl - 无法连接到 api-ssl.bitly.com :443

encryption - AES PKCS7填充