2016-12-05 115 views
5

在Akka,SSL和證書管理方面,有幾個關於stackoverflow的問題來實現Akka actors之間的安全(加密)點對點通信。簡單的Akka ssl加密

有關遠程處理的Akka文檔(http://doc.akka.io/docs/akka/current/scala/remoting.html) 指示讀者將此資源作爲如何生成X.509證書的示例。

http://typesafehub.github.io/ssl-config/CertificateGeneration.html#generating-a-server-ca

由於演員都在內部服務器上運行,服務器CA爲example.com(或任何真正的DNS名稱)的一代人似乎無關。 大多數服務器(有關Amazon Web服務運行例如EC2實例)將在VPC運行和初始阿卡遙控器就會像

remote = "akka.tcp://[email protected]:2553"

我的理解私有IP地址,是它應該是可能的創建一個自簽名證書並生成所有同行共享的信任存儲。

隨着更多的Akka節點聯機,它們應該(我假設)能夠使用所有其他節點使用的相同的自簽名證書和信任存儲。我還假設,即使您沒有CA,也不需要信任所有擁有不斷增長的證書列表的同行,因爲信任存儲會驗證該證書,並避免中間人受到攻擊。

理想的解決方案和希望 - 可以在沒有CA步驟的情況下生成一個自簽名證書,一個信任存儲文件,並在任意Akka遠程組合中共享/遙控器和遙控器,即所有的同行)

必須有一個簡單的按照流程來生成簡單的內部加密和客戶認證證書(只相信所有的同齡人一樣)

問:可以將這些全部是每個對等體上的相同文件,這將確保他們正在與受信任的客戶端通話,並啓用加密功能?

key-store = "/example/path/to/mykeystore.jks" 
trust-store = "/example/path/to/mytruststore.jks" 

問題:是X.509連接說明上述矯枉過正 - 有一個簡單的自簽名/信任存儲的方式,而不CA步驟是什麼?特別是僅針對內部IP地址(無DNS),並且證書中沒有不斷增加的IP地址網絡,因爲服務器可以自動擴展和縮減。

+0

這似乎是一個security.stackexchange.com問題 – bob0the0mighty

回答

2

首先,我不得不承認我不知道Akka,但我可以給你在SSL協議中使用X509證書的標識準則。

akka server configuration需要綁定到一個主機名

SSL證書,您將需要分配一個DNS主機名,用於主機名驗證的服務器。在這個例子中,我們假設主機名是example.com。

SSL證書可以綁定到DNS名稱或IP(不常用)。爲了使客戶端驗證是正確的,它必須與IP /主機服務器

AKKA要求每個服務器證書的,由公共CA

CA 
    - server1: server1.yourdomain.com (or IP1) 
    - server2: server2.yourdomain.com (or IP2) 

發出爲了簡化服務器部署,您可以使用通配符*.yourdomain.com

CA 
    - server1: *.yourdomain.com 
    - server2: *.yourdomain.com 

在您需要配置,包括在JKS CA證書的公鑰一個信任的客戶端。客戶將信任由此CA頒發的任何證書。

在你描述的模式中,我認爲你不需要密鑰存儲。當您還想使用證書來識別客戶端時,這是需要的。兩種情況下都會建立SSL加密通道。

如果您沒有像yourdomain.com這樣的域名,並且想要使用內部IP,我建議爲每臺服務器頒發證書並將其綁定到IP地址。

根據akka如何驗證服務器證書,可以爲所有服務器使用唯一的自簽名證書。 Akka可能將信任配置依賴於JVM默認設置。如果您在信任庫(而不是CA)中包含自簽名證書,ssl套接字工廠將信任提供此證書的連接,即使它已過期或者服務器的主機名與證書不匹配。我不推薦它

+0

謝謝。想知道如果所有需要的都是理想的SSL加密 - 在所有對等體之間(對等體1信任對等體2,對等體2信任對等體1,對等體1信任對等體3和對等體3必須信任對等體1和對等體2,....)。你會得到它的要點,它可能是指數級的對等信任列表,可以自動擴展,IP地址改變等)。 主要需要可用於加密的通用ssl證書。 不確定客戶端身份驗證是必要的,否則我認爲它需要一個內部DNS(如AWS路由53內部DNS創建一個涵蓋* .mycompany.local的證書) –

+0

由於您擁有所有同齡人,我認爲客戶端身份驗證不是必需的。當您需要在網絡外部驗證客戶端時應該使用它。每臺服務器都有一個由主要CA頒發的證書,所以實際上這個方案實現了相同的功能,並且所需的配置將更加簡單 – pedrofb

+0

我想知道是否需要'生成服務器CA'。 由於不需要客戶端身份驗證,正在生成一個沒有CA的自簽名證書,它有點更加明智嗎? –