无法通过 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>

如果我尝试用它启动我的localhost代理,我在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

所以要尝试解决这个问题,我在localhost代理的activemq.xml配置中添加了以下内容:

<sslContext>
<sslContext keyStore="file:${activemq.base}/conf/broker.ks"
keyStorePassword="###"
trustStore="file:${activemq.base}/conf/client.ts"
trustStorePassword="###"/>
</sslContext>

使用以下命令生成broker.ksclient.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证书并将其添加到我的localhost代理?我不知道下一步该做什么。

更新:我使用Portecle从AWS代理下载SSL证书并将它们添加到client.ts

似乎在验证端(本地主机),需要验证远程AWS代理的TLS证书。为此,验证端需要使用保存证书层次的受信任密钥库(又称truststore)进行设置。(或根CA,取决于从远程AWS代理返回的证书链)从根CA到服务器证书。

请将StarField CA证书上传到受信任的存储中,这将根据您的评论解决问题。

此链接有实现该目标的详细信息。

最新更新