gpt4 book ai didi

java - 将 SSL 证书加载到容器的 JVM

转载 作者:行者123 更新时间:2023-12-04 22:39:08 24 4
gpt4 key购买 nike

我有一个 Helm Chart。部署时会创建以下 Kubernetes 资源:

  • 启用 SSL 的服务
  • 使用我的 Docker 镜像创建的容器,它在内部运行与上述服务通信的 Java 进程。
  • 安装在上述容器内的 Kubernetes secret (SSL 证书和访问 key )。

  • 问题是除非我将 SSL 证书添加到 Java 证书,否则我的容器无法与我的服务通信。我通过运行以下命令来做到这一点 手动 在我的 docker 里面,有 用户。
    cd ${JAVA_HOME}/jre/lib/security 

    keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias myservicecert -file /home/myuser/.myservice/certs/public.crt
    我想自动化上述步骤,但面临问题:
  • 我无法在 Dockerfile 中执行上述步骤因为当时没有证书。显而易见。
  • 我无法在 entrypoint.sh 中添加这些步骤docker 的文件,因为入口点文件由不同于 root 的用户执行。
  • 我能想到的另一个解决方案是更改路径的权限 ${JAVA_HOME}/jre/lib/security/cacerts777这样我就可以在 entrypoint.sh 中运行这些命令没有问题。但由于安全原因,我不确定这是否是正确的方法。对此有何建议?
  • 我不想使用 Djavax.net.ssl.trustStore 为证书设置自定义位置因为那时 java 将无法访问根证书。

  • 实现这一目标的正确方法是什么?

    最佳答案

    最简单的方法可能是允许运行 keytool使用 sudo 命令。
    您可能需要在 Dockerfile 中安装 sudo,然后您可以设置 /etc/sudoers允许用户运行entrypoint.sh运行该特定命令(没有密码)。看看this answer on Unix如何做到这一点。
    然后,您需要做的就是找到证书并运行

    sudo keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias myservicecert -file /home/myuser/.myservice/certs/public.crt
    entrypoint.sh或者,您可以在构建容器时安装一个脚本,该脚本设置证书并安装它并允许使用 sudo 运行它。这样,如果有人获得对容器的访问权限,您就不会打开添加更多证书的可能性

    关于java - 将 SSL 证书加载到容器的 JVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67112947/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com