2011-03-22 38 views
16

我認爲在我的應用程序之間使用zeromq作爲消息傳遞層。至少在某些情況下,我希望溝通是安全的,我正在考慮SSL。zeromq如何與SSL一起使用?

是否有一些標準的方式如何ssl啓用zeromq?據我瞭解,它不支持開箱即用。

這將是很好,如果我只是有一個參數連接需到插座時(布爾:useSsl):)

任何想法?

回答

4

我們目前正在實施一個使用0mq的預共享密鑰解決方案,實現基於TLS/SSL的密鑰交換協議。

本質上,我們有一個數據聚合器服務,通過多播0mq發佈者發佈加密狀態的健康數據。使用對稱密鑰(AES128)對數據進行加密,並且可以從作爲更簡單的請求/響應模型(超過0mq)運行的第二個服務檢索。

要檢索的對稱密鑰(PSK),我們正在實施以下協議: 客戶端連接 服務器會將其證書 客戶端驗證服務器證書對信任的CA鏈 客戶端發送其證書 服務器驗證對客戶端證書使用PSK客戶端的公鑰 服務器發送加密PSK到客戶端的客戶端 解密PSK

一旦客戶端具有PSK其CA鏈 Server加密,它可以解密通過多播檢索的郵件。

我們也在考慮實現在多播服務中使用兩個包絡密鑰的會話過期算法。一個關鍵是當前會話密鑰,第二個是舊的過期密鑰。這樣,客戶端有更多時間檢索新密鑰,而無需在檢索新密鑰之前緩存加密消息。

+0

進展如何? – Anko 2012-12-12 22:43:15

6

瞭解這不是你的問題的答案,我將在用0mq發送消息之前直接使用RSA加密消息。

由於沒有在我選擇的平臺上進行全面測試和實現的更加集成的加密方法,這就是我要做的。 0mq剛剛發佈了版本4,其中加入了加密功能,但它仍然被認爲是實驗性的,並沒有完全由語言綁定支持。

加密的消息,而不是連接,似乎提供了簡單的升級路徑,併爲我們的目的是區別非常簡單,只是語義給出怎樣不得不目前實行加密,莫衷一是。

編輯:我現在比我寫的時候更瞭解加密,RSA不適合加密郵件數據。使用AES,或者手動共享密鑰(這是我們的短期方法),或者按照Jim Miller的回答實現密鑰共享方案......但要小心如果採取後一種方法,設計和實施密鑰共享方案安全很難。比你想象的更難。您可以直接使用SSL/TLS(使用消息BIO),其他人也可以這樣做,但這並不簡單,但至少知道SSL方案是行業標準,因此符合最低安全要求。

簡而言之,在將橢圓曲線加密到ZMQ 4之前被認爲是可靠並且成爲標準之前,「接受的解決方案」將是手動實現SSL/TLS通過連接,並且如果失敗,則使用AES 128或256一個安全的密鑰共享機制(密鑰共享是適當使用RSA的地方)。

+2

由於剛剛得到讚揚,我更新了答案,以反映自我最初編寫它以來學到的知識。 – Jason 2014-03-31 14:08:15

相關問題