docker - 向工件添加新的密钥库会破坏现有的 https 连接
问题描述
在我的工作中,我们有一个运行工件的 docker 容器,我们需要添加一个带有自签名证书的自定义密钥库以使用 Crowd 身份验证机制。
我们所做的是删除旧的 docker 容器并使用以下启动参数运行一个新容器:
-e EXTRA_JAVA_OPTIONS="-Djavax.net.ssl.trustStore=/var/opt/jfrog/artifactory/keystore/selfsignedcerts.jks -Djavax.net.ssl.trustStorePassword=selfsignedpassword"
这行得通,我们可以使用人群身份验证机制,但它破坏了 npm-remote 存储库(https://registry.npmjs.org)(以及其他 https 存储库)
当使用 launch 参数尝试测试 npm-remote repo 时,我们会收到以下错误:
与远程存储库的连接失败:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径
我的假设是使用该参数会覆盖默认密钥库,但我不确定。有没有办法同时使用两个密钥库或将自签名证书附加到现有的密钥库中,而不是替换它?(我什至找不到密钥库)。
解决方案
我们设法找到了以下解决方案:
快速解释:我们必须将中间证书和根证书添加到 artifactory 附带的常规 cacerts 文件中。我们意识到最好的方法是通过基于 artifactory 制作自定义 docker 镜像:
Dockerfile :
FROM docker.bintray.io/jfrog/artifactory-pro:<your version or latest>
COPY cacerts_with_your_intermediatesAndRoots /etc/ssl/certs/java/cacerts
然后运行这个新图像而不是准系统工件,它就会工作。
请注意,如果您当前有自定义映像,则只需将 COPY 行添加到现有 Dockerfile。此外,如果您没有使用 Docker 运行工件,那么只需将您的证书添加到文件中并重新启动。
您可能还会注意到我使用的路径与上面链接中使用的路径不同。那是因为它们的路径是符号链接,而不是实际文件。
如果您有任何问题,请随时与我联系。
推荐阅读
- vue.js - Ionic Vue 和 AR.js
- c# - AWS 弹性 beanstalk Linux 的 .NET 中的 .ebextensions 文件夹在哪里
- java - 如何恢复丢失的 NetBeans 类?
- android - Kotlin 无法更改按钮属性
- react-native - React native:为数组中的每个项目设置坐标
- reactjs - 如何将用户重定向到不同的页面?
- google-sheets-api - 从 Google Sheet 读取连接只允许前 100,000 行
- java - AnnotatedConnectException - Springboot - 微服务 - 使用 eureka 服务器的分布式服务器
- sql - 如何对特定列分组的列求和?
- android - 如何在 RecyclerView 中对字符串元素进行排序?