2016-05-12 185 views
0

我正在使用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

回答

1

好吧,我想你已經錯過了解如何證書認證工作。

有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