2016-12-05 110 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的自签名证书,它有点更加明智吗? –