无法通过 SSL 连接到代理
Can't connect to broker over SSL
我在本地主机上有一个 ActiveMQ 实例 运行,它试图连接到 AWS (Amazon MQ) 上的另一个实例 运行。 AWS 上的代理 运行 需要通过 SSL 建立代理到代理的连接。
在我的本地主机代理的 activemq.xml
中,我添加了以下内容以在 AWS 上创建与代理 运行 的连接(目前只是一种方式):
<networkConnectors>
<networkConnector name="local-to-aws" userName="myCommonUser" duplex="true" uri="static:(ssl://###.mq.ca-central-1.amazonaws.com:61617)"/>
</networkConnectors>
如果我尝试用它启动本地主机代理,我的 activemy.log
文件中会出现以下错误:
2021-01-29 20:19:32,638 | WARN | Could not start network bridge between: vm://localhost and:
ssl://###.mq.ca-central-1.amazonaws.com:61617 due to: java.security.NoSuchAlgorithmException:
Error constructing implementation (algorithm: Default, provider: SunJSSE, class:
sun.security.ssl.SSLContextImpl$DefaultSSLContext) |
org.apache.activemq.network.DiscoveryNetworkConnector | Simple Discovery Agent-2
因此,为了尝试解决这个问题,我在本地主机代理的 activemq.xml
配置中添加了以下内容:
<sslContext>
<sslContext keyStore="file:${activemq.base}/conf/broker.ks"
keyStorePassword="###"
trustStore="file:${activemq.base}/conf/client.ts"
trustStorePassword="###"/>
</sslContext>
broker.ks
和 client.ts
是使用以下命令生成的:
Using keytool, create a certificate for the broker:
keytool -genkey -alias broker -keyalg RSA -keystore broker.ks
Export the broker's certificate so it can be shared with clients:
keytool -export -alias broker -keystore broker.ks -file broker_cert
Create a certificate/keystore for the client:
keytool -genkey -alias client -keyalg RSA -keystore client.ks
Create a truststore for the client, and import the broker's certificate. This establishes that the client "trusts" the broker:
keytool -import -alias broker -keystore client.ts -file broker_cert
这就是我在本地主机代理上启用 SSL 所做的全部工作,我不确定除了将 <sslContext>
元素添加到我的配置之外是否还有其他需要做的事情。
当我在进行更改后尝试启动 localhost 代理时,我现在在 activemq.log
中收到不同的错误:
2021-01-29 20:07:03,686 | INFO | Error with pending remote brokerInfo on:
ssl://###.mq.ca-central-1.amazonaws.com/##.###.#.106:61617 (Connection or inbound has closed) |
org.apache.activemq.network.DemandForwardingBridgeSupport | ActiveMQ Transport: ssl://###.mq.ca-
central-1.amazonaws.com/##.###.#.106:61617
2021-01-29 20:07:03,687 | WARN | Could not start network bridge between: vm://localhost and:
ssl://###.mq.ca-central-1.amazonaws.com:61617 due to: sun.security.validator.ValidatorException:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find
valid certification path to requested target | org.apache.activemq.network.DiscoveryNetworkConnector |
Simple Discovery Agent-3
这就是我被难住的地方。
有谁知道我做错了什么?我在 AWS 代理的配置中没有看到任何与 SSL 相关的内容,我假设这是因为 AWS 故意向我隐藏了它以防止我更改该代理的任何 SSL 设置。
我是否需要以某种方式获取 AWS 代理使用的 SSL 证书并将其添加到我的本地主机代理?我不知道下一步该做什么。
更新:我使用 Portecle 从 AWS 代理下载 SSL 证书并将它们添加到 client.ts
。
似乎在验证端(本地主机)需要验证远程AWS代理的TLS证书。为此,验证方 需要使用保存该证书层次结构的受信任密钥库(又名信任库)进行设置 (或根 CA,具体取决于从远程 AWS 返回的证书链代理)从根 CA 到服务器证书。
请将 StarField CA 证书上传到受信任的商店,这会根据您的评论解决问题。
此 link 详细介绍了如何实现该目标。
我在本地主机上有一个 ActiveMQ 实例 运行,它试图连接到 AWS (Amazon MQ) 上的另一个实例 运行。 AWS 上的代理 运行 需要通过 SSL 建立代理到代理的连接。
在我的本地主机代理的 activemq.xml
中,我添加了以下内容以在 AWS 上创建与代理 运行 的连接(目前只是一种方式):
<networkConnectors>
<networkConnector name="local-to-aws" userName="myCommonUser" duplex="true" uri="static:(ssl://###.mq.ca-central-1.amazonaws.com:61617)"/>
</networkConnectors>
如果我尝试用它启动本地主机代理,我的 activemy.log
文件中会出现以下错误:
2021-01-29 20:19:32,638 | WARN | Could not start network bridge between: vm://localhost and:
ssl://###.mq.ca-central-1.amazonaws.com:61617 due to: java.security.NoSuchAlgorithmException:
Error constructing implementation (algorithm: Default, provider: SunJSSE, class:
sun.security.ssl.SSLContextImpl$DefaultSSLContext) |
org.apache.activemq.network.DiscoveryNetworkConnector | Simple Discovery Agent-2
因此,为了尝试解决这个问题,我在本地主机代理的 activemq.xml
配置中添加了以下内容:
<sslContext>
<sslContext keyStore="file:${activemq.base}/conf/broker.ks"
keyStorePassword="###"
trustStore="file:${activemq.base}/conf/client.ts"
trustStorePassword="###"/>
</sslContext>
broker.ks
和 client.ts
是使用以下命令生成的:
Using keytool, create a certificate for the broker:
keytool -genkey -alias broker -keyalg RSA -keystore broker.ks
Export the broker's certificate so it can be shared with clients:
keytool -export -alias broker -keystore broker.ks -file broker_cert
Create a certificate/keystore for the client:
keytool -genkey -alias client -keyalg RSA -keystore client.ks
Create a truststore for the client, and import the broker's certificate. This establishes that the client "trusts" the broker:
keytool -import -alias broker -keystore client.ts -file broker_cert
这就是我在本地主机代理上启用 SSL 所做的全部工作,我不确定除了将 <sslContext>
元素添加到我的配置之外是否还有其他需要做的事情。
当我在进行更改后尝试启动 localhost 代理时,我现在在 activemq.log
中收到不同的错误:
2021-01-29 20:07:03,686 | INFO | Error with pending remote brokerInfo on:
ssl://###.mq.ca-central-1.amazonaws.com/##.###.#.106:61617 (Connection or inbound has closed) |
org.apache.activemq.network.DemandForwardingBridgeSupport | ActiveMQ Transport: ssl://###.mq.ca-
central-1.amazonaws.com/##.###.#.106:61617
2021-01-29 20:07:03,687 | WARN | Could not start network bridge between: vm://localhost and:
ssl://###.mq.ca-central-1.amazonaws.com:61617 due to: sun.security.validator.ValidatorException:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find
valid certification path to requested target | org.apache.activemq.network.DiscoveryNetworkConnector |
Simple Discovery Agent-3
这就是我被难住的地方。
有谁知道我做错了什么?我在 AWS 代理的配置中没有看到任何与 SSL 相关的内容,我假设这是因为 AWS 故意向我隐藏了它以防止我更改该代理的任何 SSL 设置。
我是否需要以某种方式获取 AWS 代理使用的 SSL 证书并将其添加到我的本地主机代理?我不知道下一步该做什么。
更新:我使用 Portecle 从 AWS 代理下载 SSL 证书并将它们添加到 client.ts
。
似乎在验证端(本地主机)需要验证远程AWS代理的TLS证书。为此,验证方 需要使用保存该证书层次结构的受信任密钥库(又名信任库)进行设置 (或根 CA,具体取决于从远程 AWS 返回的证书链代理)从根 CA 到服务器证书。
请将 StarField CA 证书上传到受信任的商店,这会根据您的评论解决问题。
此 link 详细介绍了如何实现该目标。