【问题标题】:Distributed Java Application inside docker swarmdocker swarm 中的分布式 Java 应用程序
【发布时间】:2018-10-18 20:58:27
【问题描述】:

我的目标是在 docker swarm 上的 docker 容器内运行分布式 NIFI 集群。我对官方 NIFI docker 映像所做的配置以我能够运行集群的方式工作。

对于集群,我使用单个服务,每个副本都是一个单独的 NIFI 实例。由于这有效,我现在想继续安全。我首先使用秘密(移交信任和密钥库)将公开签名的通配符证书应用于 java 应用程序。在我看来,对于大多数分布式 Java 应用程序来说,这可能是一种可行的方法。但是对于 NIFI,我现在遇到了 NIFI 本身不支持通配符证书的问题。

我目前正在考虑一种方法,如何以每个容器都有自己的证书的方式运行集群。我目前的想法是使用 NIFI JVM 可以信任的自我管理的内部 CA 在容器内运行自签名证书。由于我不能 100% 确定这是否是解决此问题的正确方法,因此我感谢您的提示和想法。
NIFI 使用一些端口进行通信,并使用 HTTP/S 协议发出请求。 NIFI 本身在节点/容器上作为 java 应用程序运行。

【问题讨论】:

    标签: java security docker docker-swarm apache-nifi


    【解决方案1】:

    Apache NiFi 提供了一个TLS Toolkit,它可以为您自动完成大部分过程。它可以运行临时或长期存在的内部证书颁发机构 (CA),该证书颁发机构生成内部密钥并使用它们来创建自签名 CA 证书并签署传入的证书签名请求 (CSR)。每个上线的节点都可以访问 CA 服务并在其密钥库和信任库中安装正确配置的证书,并使用单个命令行调用自动使用这些文件的位置和密码填充 nifi.properties 文件。这可以通过 Dockerfile、Ruby/Python/shell 脚本等配置为在部署时运行。

    HMAC/SHA-256 签名是在 SPKI 上使用共享秘密令牌值计算的,以确保流氓/恶意服务不会获得颁发的证书。所有证书都将由同一个 CA 证书签名,并且该证书已填充到信任库中,因此集群中的每个节点都将信任其他节点。请求的 CN 也填充在 SAN 条目中,并且支持其他 SAN 条目,因此这符合 RFC 6125。

    如上所述,通配符证书不受支持且不推荐使用,原因有很多 (some enumerated here),但也因为使用提供的工具包可以轻松地更安全地部署唯一证书。正在努力(NIFI-5443NIFI-5398)修改一些内部集群通信,使其在面对通配符证书时具有弹性,但这些目前不可用。

    【讨论】:

    • 谢谢,采用这种方法,这对我们的用例来说已经足够了:)。
    猜你喜欢
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多