我的目标是在docker群上的docker容器内运行分布式NIFI集群。我对官方NIFI docker映像进行的配置可以运行集群。
对于群集,我使用单个服务,每个副本是一个单独的NIFI实例。既然可以,我现在想继续进行安全性工作。我首先使用一个秘密(将信任和密钥库移交)将公开签名的通配符证书应用于Java应用程序。在我看来,这对于大多数分布式Java应用程序而言都是可行的方法。但是现在有了NIFI,我遇到了一个问题,即NIFI本身不支持通配符证书。
我目前正在考虑一种方法,该方法如何以每个容器都有其自己的证书的方式运行集群。我当前的想法是使用NIFI JVM可以信任的自我管理内部CA在容器内运行自我签名证书。由于我不确定100%是否会是解决此问题的正确方法,因此我非常感谢您提供的提示和想法。
NIFI使用某些端口进行通信,并使用HTTP / S协议发出请求。 NIFI本身在节点/容器上作为Java应用程序运行。
最佳答案
Apache NiFi提供了一个TLS Toolkit,可以自动为您完成此过程。它可以运行临时的或长期存在的内部证书颁发机构(CA),该机构会生成内部密钥,并使用它们创建自签名的CA证书并签署传入的证书签名请求(CSR)。每个联机的节点都可以联系CA服务,并在其密钥库和信任库中安装正确配置的证书,并通过一次命令行调用自动为nifi.properties
文件填充这些文件的位置和密码。可以将其配置为在部署时通过Dockerfile,Ruby / Python / shell脚本等运行。
使用共享的秘密令牌值通过SPKI计算HMAC / SHA-256签名,以确保恶意/恶意服务不会获得已颁发的证书。所有证书都将由相同的CA证书签名,并且已经在信任库中进行了填充,因此群集中的每个节点都将信任其他证书。所请求的CN也会填充在SAN条目中,并且支持其他SAN条目,因此符合RFC 6125。
如上所述,由于种种原因(some enumerated here),不支持也不建议使用通配符证书,而且还因为使用提供的工具包使唯一证书的更安全的部署变得容易。正在进行不断的努力(NIFI-5443,NIFI-5398)来修改一些内部群集通信以在面对通配符证书时具有弹性,但是目前尚不可用。
关于java - docker swarm内部的分布式Java应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52823218/