有关Akka、SSL和证书管理以支持Akka参与者之间的安全(加密)对等通信,堆栈溢出有几个问题。
关于远程处理(http://doc.akka.io/docs/akka/current/scala/remoting.html)的Akka文档将读者指向这个资源,作为如何生成X.509证书的示例。
http://typesafehub.github.io/ssl-config/CertificateGeneration.html#generating-a-server-ca
由于参与者在内部服务器上运行,因此生成用于example.com的服务器CA (实际上是任何DNS名称)似乎是不相关的。大多数服务器(例如运行在上的EC2实例)将在VPC中运行,初始的Akka远程服务器将是私有IP地址,如
remote = "akka.tcp://sampleActorSystem@172.16.0.10:2553"
我的理解是,应该可以创建一个自签名证书,并生成一个信任存储,供所有对等方共享。
随着更多的Akka节点上线,它们(我想)应该能够使用所有其他对等点使用的相同的自签名证书和信任存储。我还假设,即使您没有CA,也不需要信任所有具有不断增长的证书列表的对等方,因为信任存储将验证该证书,并避免中间人受到攻击。
理想的解决方案,也是希望--能够在不使用CA步骤的情况下生成单个自签名证书,并在Akka remotes /(客户端调用远程和远程,即所有对等点)的任何组合中共享该证书。
必须有一个简单的后续过程来生成用于简单内部加密和客户端身份验证的证书(只需信任所有对等方)。
问:在每个对等点上,这些文件是否都是相同的,这将确保他们与受信任的客户端进行对话,并启用加密?
key-store = "/example/path/to/mykeystore.jks"
trust-store = "/example/path/to/mytruststore.jks"问:上面连接的X.509指令是否过度--在没有CA步骤的情况下,是否有一个简单的自签名/信任存储方法?专门为内部IP地址(没有DNS)和没有一个不断增加的网络IP地址在一个证书,因为服务器可以自动放大上下。
发布于 2016-12-14 08:52:45
首先,我不得不承认,我不认识Akka,但我可以给您提供在SSL协议中使用X509证书进行身份验证的指南。
akka服务器配置需要绑定到主机名的SSL证书。
您将需要一个具有DNS主机名的服务器来验证主机名。在本例中,我们假设主机名为example.com。
SSL证书可以绑定到DNS名称或IP (不常见)。为了使客户端验证正确,它必须与服务器的IP / hostname相对应。
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颁发的任何证书。
在您所描述的架构中,我认为您不需要keystore。当您还想用证书标识客户端时,也需要它。在这两种情况下都将建立SSL加密通道。
如果您没有像yourdomain.com这样的域名,并且希望使用内部IP,我建议为每个服务器颁发一个证书,并将其绑定到IP地址。
根据akka验证服务器证书的方式,可以为所有服务器使用唯一的自签名证书。Akka可能依赖于JVM默认的信任配置。如果在信任存储区(而不是CA)中包含自签名证书,ssl套接字工厂将信任呈现此证书的连接,即使该证书已过期或服务器主机名与证书不匹配。我不推荐它
https://stackoverflow.com/questions/40967187
复制相似问题