ssl - 引入 SSL 时 ActiveMQ 错误证书
问题描述
我正在尝试在我的 ActiveMq 中使用 openwire+ssl。我正在使用 rmohr/activemq 提供的 docker 镜像。
由于 broker_localhost.cert 已过期,我运行以下命令来生成必要的文件。
keytool -genkey -alias broker -keyalg RSA -keystore broker.ks
keytool -export -alias broker -keystore broker.ks -file broker_cert
keytool -genkey -alias client -keyalg RSA -keystore client.ks
keytool -import -alias broker -keystore client.ts -file broker_cert
keytool -export -alias client -keystore client.ks -file client_cert
keytool -import -alias client -keystore broker.ts -file client_cert
然后在activemq.xml
我添加:
<sslContext keyStore="file:${activemq.base}/certs/ActiveMq/broker.ks"
keyStorePassword="password" trustStore="file:${activemq.base}/certs/ActiveMq/broker.ts"
trustStorePassword="password"/>
也:
<transportConnector name="openwire+ssl" uri="ssl://0.0.0.0:61617?transport.enabledProtocols=TLSv1"/>
当我运行docker compose
创建 ActiveMQ 实例时,我添加了一个环境变量:
environment:
- ACTIVEMQ_SSL_OPTS="-Djavax.net.ssl.keyStore=/opt/activemq/certs/ActiveMq/broker.ks -Djavax.net.ssl.keyStorePassword=password -Djavax.net.ssl.trustStore=/opt/activemq/certs/ActiveMq/broker.ts -Djavax.net.ssl.trustStorePassword=password -Djavax.net.debug=ssl,handshake"
之后,我将在 Windows 中前面步骤中生成的 broker_cert 导入Manage user certificates
为Trusted Root Certification Authorities
.
然后我构建我的 Asp.Net Core 项目以访问 ActiveMQ 代理
var uri = new Uri(@"ssl://localhost:61617?trace=true&needClientAuth=true&transport.serverName='MoveQ Broker'");
ITransportFactory sslTransportFactory = new SslTransportFactory();
((SslTransportFactory)sslTransportFactory).SslProtocol = "Tls";
ITransport transport = sslTransportFactory.CreateTransport(uri);
_connection = new Connection(uri, transport, new IdGenerator());
((Connection)_connection).UserName = "username";
((Connection)_connection).Password = "password";
_session = _connection.CreateSession(AcknowledgementMode.AutoAcknowledge);
但是我不断得到
activemq | WARN | Transport Connection to: tcp://172.17.0.1:35356 failed: javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
谁能帮忙看看我可能会错过哪些步骤?
解决方案
如果您只需要单向 SSL 并且您正在使用自签名证书,那么您不需要代理上的信任库或客户端上的密钥库。您只需要代理上的密钥库和客户端上的信任库。像这样生成这些资源:
keytool -genkey -keystore broker-keystore.ks
keytool -export -keystore broker-keystore.ks -file broker.cer
keytool -import -keystore client-truststore.ks -file broker.cer
然后broker-keystore.ks
在代理和client-truststore.ks
客户端上使用。
推荐阅读
- php - 我如何从 2019-03 年减去一个月
- java - 将数据从二维数组传递到 arrayList
- php - PHP 7.0 之前的后期静态绑定和 isset
- django - 如何不在`python manage.py test`上运行芹菜任务
- php - PHP Mockery部分测试双重不从父类调用方法
- sql-server - 从 macbook 连接到 Win 10 上的 Sql Server
- c# - C# Linq To SQL 填充 DataGrid 并将字段放入 TextBox
- html - 如果元素包含带有类的特定div,如何隐藏元素
- authentication - CDA 认证参数
- python - firebase-admin python 发送密码重置邮件