ssl - 通过 SSL ActiveMQ 连接 2 个代理
问题描述
我正在尝试创建一个由 2 个本地代理组成的 ActiveMQ 网络。我已经完成了如下配置。我对此很陌生,不确定我错过了什么。我向两个经纪人提供了相同的 ks 和 ts。
<networkConnectors>
<networkConnector name="LinktoInstance1"
uri="static:(ssl://localhost:61616)"
duplex="false"
networkTTL="2"
dynamicOnly="true"/>
</networkConnectors>
<transportConnectors>
<transportConnector name="ssl" uri="ssl://0.0.0.0:61617?trace=true&needClientAuth=true"/>
</transportConnectors>
<sslContext>
<sslContext keyStore="file:${activemq.home}/SSL/broker.ks" keyStorePassword="##" trustStore="file:${activemq.home}/SSL/broker.ts" trustStorePassword="##"/>
</sslContext>
启动时,我在两个经纪人上都收到以下错误。
WARN | Could not start network bridge between: vm://instance1 and: ssl://localhost:61617 due to: Connection refused: connect
INFO | Network Connector DiscoveryNetworkConnector:LinktoInstance2:BrokerService[instance1] started
INFO | Apache ActiveMQ 5.16.2 (instance1, ID:XXXXX-8986975-0:1) started
INFO | For help or more information please see: http://activemq.apache.org
INFO | Establishing network connection from vm://instance1 to ssl://localhost:61617
INFO | Connector vm://instance1 started
INFO | Error with pending remote brokerInfo on: ssl://localhost/127.0.0.1:61617 (Connection has been shutdown: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: signature check failed)
INFO | instance1 Shutting down LinktoInstance2
WARN | Could not accept connection from tcp://127.0.0.1:60937: Received fatal alert: certificate_unknown (Received fatal alert: certificate_unknown)
INFO | instance1 bridge to Unknown stopped
INFO | Error with pending local brokerInfo on: vm://instance1#2 (peer (vm://instance1#3) stopped.)
解决方案
PKIX 路径错误通常意味着某种证书链失败。它可能是 CA 或中间证书,可能无法从远程端发送,或者在信任库中正确发送、证书过期、主机名不匹配等。发布完整的堆栈跟踪 - 应该有一个“Caused by:”,并提供更多详细信息.
提示:设置 -Djava.net.debug=ssl 对调试证书问题非常有帮助。
也有很多变化:
-Djavax.net.debug=ssl,handshake
-Djavax.net.debug=ssl:handshake:verbose:keymanager:trustmanager -Djava.security.debug=access:stack
OpenSSL 命令行在验证远程服务器是否发送良好的证书链方面也非常有用:openssl to validate remote server
推荐阅读
- powershell - 在 powershell 中重命名 AD 用户对象名称
- java - 如何将 java KeyStore 转换为 PKCS7 .p7b 文件?
- laravel - 如何在两个输入字段中只设置一个 NULLABLE
- javascript - 如何根据 ID 定位表,以便遍历其 td-span,并更改跨度颜色以及将其值提供给控制台
- java - Spring MVC 返回 404
- docker - 将两个 docker run 命令合并在一起
- c# - LINQ 搜索包含具有对象的类的列表
- c# - 在 C# 中从 datagridview 创建一个 sqlite 表
- c# - 创建 Json 反序列化器以修复移动的类
- swift - 屏幕快照在设备上显示工具栏,但在模拟器上不显示