用于Java的MQTT的TLS/SSL连接

问题描述:

我正在使用MQTT协议。我配置了它的服务器,并在端口1883上使用它的mosquitto库在java中执行了通信。 现在我想让这个通信更加安全。我知道的是端口8883被保留用于基于tls的安全通信。 它需要X.509 certiicates。 为此我找到了以下教程。用于Java的MQTT的TLS/SSL连接

http://www.embedded101.com/Blogs/PaoloPatierno/entryid/366/mqtt-over-ssl-tls-with-the-m2mqtt-library-and-the-mosquitto-broker

但我的问题是

1.how才能生成在Java代码中这些证书?

2.如何一次使用多个证书?根据上述教程,我们只能在服务器的mosquitto.conf文件中一次只指定一组证书,然后我们需要重新启动服务器。我不想这样做。)

3.我们可以让运行的服务器知道这些新生成的证书。除了在服务器的conf文件中指定之外,还有其他办法吗?

+0

moreiver,我想知道我们可以在java中启动任何mqtt代理吗? – Sadaf

+0

为什么要使用多个证书? – hardillb

+0

如果我在不同的使用情况下使用多个传感器,并且每个传感器在同一个代理上与不同的主题进行通信。 – Sadaf

好吧,我想你已经错过了解如何证书认证工作。

有2个部分它(证明经纪人是它说这是谁,然后证明连接客户端是谁)

首先代理将有1个证书,它标识到世界各地。您可以将Mosquitto配置为在启动时使用此证书,而不需要更改它。此证书将由CA签署。

传感器(客户)将拥有CA证书的副本,当他们连接到经纪人以确保其声称是谁时,他们将使用该证书的副本。

其次,如果您想使用客户端证书来识别单独的传感器,那么它们也都需要证书。通常情况下,这将由经纪人证书在同一个CA上签字,以便经纪人可以验证客户是他们自称的客户。蚊子可以设置为使用证书中的CN(use_identity_as_username true)作为连接客户端的用户名,然后您可以使用mosquitto_auth_plugin跟踪证书中的CN,并应用ACL来控制谁可以使用哪些主题。

至于使用Java创建的证书,我建议你看一下这个question

没有必要当你发出一个新的证书重新启动Mosquitto。

+0

好吧!@hardillb。 但你可以解释一下关于mosquitto_auth_plugin。因为我没有找到一种方法来在java eclipse项目中使用它。 谢谢。 – Sadaf

+0

您可以在mosquitto中配置它,然后您可以使用JDBC中的JDBC将新用户/ ACL条目推送到您已设置的任何数据库 – hardillb

+0

好的。但我对所有这些事情都很陌生。你可以分享一些开发者指南或与此相关的教程? 我会非常感激你。 – Sadaf