【问题标题】:Securing and encrypting ActiveMQ messages with .NET API使用 .NET API 保护和加密 ActiveMQ 消息
【发布时间】:2023-03-28 17:22:01
【问题描述】:

我正在创建一个 C# 程序,它使用 ActiveMQ 发送消息,如下所示:

IConnectionFactory factory = new ConnectionFactory("activemq:tcp://localhost:61616");
connection = (Connection)factory.CreateConnection();
connection.Start();
session = connection.CreateSession();
producer = session.CreateProducer(new ActiveMQTopic("topic1"));
ITextMessage msg = producer.CreateTextMessage();
msg.Text = Body;
producer.Send(msg);

如何使用 TLS/SSL 和端口 443 以安全的方式发送消息?为了接收它,我需要在客户端(也是 .NET)做什么?是否还有一种方法可以将客户端配置为仅接收此类安全消息,并拒绝常规消息?

【问题讨论】:

标签: c# ssl activemq


【解决方案1】:

我会尽量在一个地方提及所有相关信息
对于单向 TLS,几乎不需要客户端配置,只需更新连接字符串activemq:ssl://broker.host:61617。认证负担在服务器上。

配置本地 ActiveMQ 代理

首先在server.ts keystore文件中生成自签名密钥

<JAVA_HOME>\bin\keytool -genkey -alias broker -keyalg RSA -keystore <AMQ_HOME>\conf\server.ks

然后编辑配置文件([AMQ 安装目录]\conf\activemq.xml)
定义 ssl 上下文

<broker ...>
...
  <sslContext> 
    <sslContext keyStore="file:${activemq.conf}/server.ks"
              keyStorePassword="password" /> 
  </sslContext>

配置 ssl 传输

<transportConnectors>
    <transportConnector name="ssl" uri="ssl://localhost:61617" />
</transportConnectors>

最后启动/重启 ActiveMQ 代理

现在您可以使用此连接字符串进行连接:
activemq:ssl://localhost:61617?transport.acceptInvalidBrokerCert=true

此时您应该有一个工作原型!并且应该开始研究真正的证书。

使用自签名证书

如果您可以使用自签名证书,您可以从代理的密钥库中导出一个,将其复制到客户端的 bin 并在连接字符串中提及。

导出:
&lt;JAVA_HOME&gt;\bin\keytool -export -alias broker -keystore &lt;AMQ_HOME&gt;\conf\server.ks -file broker_cert

连接字符串:
activemq:ssl://localhost:61617?transport.BrokerCertFilename=broker_cert

双向 TLS

待续……

【讨论】:

    【解决方案2】:

    您需要在broker 上配置 SSL,然后使用正确配置的客户端连接使用 SSL 传输连接到代理。这是一篇旧文章here 使用 SSL 的 .NET 客户端。

    您需要配置客户端,使其信任来自代理的证书,无论是通过签名机构还是通过与客户端共享代理的公共证书。

    【讨论】:

    • 我需要密钥和信任库吗?如果我现在只是为了概念验证需要它,有没有办法通过代码启用安全性?
    • 我没有那个keytool..这是一个必要的步骤吗?我尝试在您的文章中将 URL 更改为这个:ssl://localhost:61617?transport.acceptInvalidBrokerCert=true 但没有帮助
    • keytool 带有用于更新密钥库的 Java,我不相信您可以将它用于您的 c# 客户端。在服务器端,您需要私钥和证书,而在客户端,您需要信任相同的证书。周围有很多例子。
    猜你喜欢
    • 2013-08-16
    • 1970-01-01
    • 2022-08-20
    • 2011-11-03
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    相关资源
    最近更新 更多