如何将 CA 根证书添加到 Jenkins Docker 容器上的 LDAP 密钥库?
How do I add CA root cert to LDAP keystore on Jenkins Docker container?
我想在 Docker 容器中的 Jenkins 上配置 ldaps。
问题:Jenkins 将不信任我的证书(由 Wireshark 跟踪确认),似乎证书未加载到密钥库(或正确的密钥库)
错误信息:
在 Jenkins 中:无法连接到 ldaps://taxmducs01-v.cybertax.cso.com:636:javax.naming.CommunicationException:简单绑定失败:taxmducs01-v.cybertax.cso.com:636 [根异常是 javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX 路径构建失败:
在 Wireshark 中:警报(级别:致命,描述:证书未知)
执行的故障排除:
- 确认 LDAP 工作正常,通过 :389 设置 LDAP 工作正常。我也知道 LDAPS 可以工作,因为我已经为来自该服务器的许多其他设备配置了 ldaps。
- 通读以下资源:
- 按照本指南中的说明进行操作 post
- 执行 tcpdump,提取字节字符串,使用 openssl 将其转换为 .cer 文件并复制到我的 docker 文件中。我知道我有正确的证书。 docker-compose 日志显示它已复制,但是当我检查密钥库时,我的证书从未出现。注意:检查位于 /etc/ssl/certs/java/cacerts 的密钥库,这是正确的密钥库吗?
这是我的docker文件:
FROM jenkinsci/blueocean
USER root
COPY ["entrypoint.sh", "/"]
RUN apk add sudo && chmod 755 /entrypoint.sh
ENTRYPOINT ["/bin/bash","-c","./entrypoint.sh"]
COPY ["ldapRoot.cer", "/tmp"]
RUN \
cd /tmp \
&& keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias ldapcert -file ldapRoot.cer
这是 docker-compose 的日志输出:
docker-compose up --build
Building jenkins
Step 1/7 : FROM jenkinsci/blueocean
---> 9e29fdde63cc
Step 2/7 : USER root
---> Using cache
---> 597101d109b7
Step 3/7 : COPY ["entrypoint.sh", "/"]
---> Using cache
---> 32eea6c01a84
Step 4/7 : RUN apk add sudo && chmod 755 /entrypoint.sh
---> Using cache
---> 28858a5e6ec5
Step 5/7 : ENTRYPOINT ["/bin/bash","-c","./entrypoint.sh"]
---> Using cache
---> f466e9893c75
Step 6/7 : COPY ["ldapRoot.cer", "/tmp"]
---> 64dda06d6ed4
Step 7/7 : RUN cd /tmp && keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias ldapcert -file ldapRoot.cer
---> Running in 95309101bec9
Certificate was added to keystore
Removing intermediate container 95309101bec9
---> cff58441080f
Successfully built cff58441080f
Successfully tagged docker_jenkins:latest
Recreating docker_jenkins_1 ... done
知道我做错了什么吗?
我相信您刚刚创建了一个新的密钥库文件,/tmp/cacerts
而不是更新 /etc/ssl/certs/java/cacerts
。如果将 keytool
导入命令更新为指向 /etc/ssl/certs/java/cacerts
会怎样?或者,entrypoint.sh
是否使用 /tmp/cacerts
作为您的信任库?
我想在 Docker 容器中的 Jenkins 上配置 ldaps。
问题:Jenkins 将不信任我的证书(由 Wireshark 跟踪确认),似乎证书未加载到密钥库(或正确的密钥库)
错误信息:
在 Jenkins 中:无法连接到 ldaps://taxmducs01-v.cybertax.cso.com:636:javax.naming.CommunicationException:简单绑定失败:taxmducs01-v.cybertax.cso.com:636 [根异常是 javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX 路径构建失败:
在 Wireshark 中:警报(级别:致命,描述:证书未知)
执行的故障排除:
- 确认 LDAP 工作正常,通过 :389 设置 LDAP 工作正常。我也知道 LDAPS 可以工作,因为我已经为来自该服务器的许多其他设备配置了 ldaps。
- 通读以下资源:
- 按照本指南中的说明进行操作 post
- 执行 tcpdump,提取字节字符串,使用 openssl 将其转换为 .cer 文件并复制到我的 docker 文件中。我知道我有正确的证书。 docker-compose 日志显示它已复制,但是当我检查密钥库时,我的证书从未出现。注意:检查位于 /etc/ssl/certs/java/cacerts 的密钥库,这是正确的密钥库吗?
这是我的docker文件:
FROM jenkinsci/blueocean
USER root
COPY ["entrypoint.sh", "/"]
RUN apk add sudo && chmod 755 /entrypoint.sh
ENTRYPOINT ["/bin/bash","-c","./entrypoint.sh"]
COPY ["ldapRoot.cer", "/tmp"]
RUN \
cd /tmp \
&& keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias ldapcert -file ldapRoot.cer
这是 docker-compose 的日志输出:
docker-compose up --build
Building jenkins
Step 1/7 : FROM jenkinsci/blueocean
---> 9e29fdde63cc
Step 2/7 : USER root
---> Using cache
---> 597101d109b7
Step 3/7 : COPY ["entrypoint.sh", "/"]
---> Using cache
---> 32eea6c01a84
Step 4/7 : RUN apk add sudo && chmod 755 /entrypoint.sh
---> Using cache
---> 28858a5e6ec5
Step 5/7 : ENTRYPOINT ["/bin/bash","-c","./entrypoint.sh"]
---> Using cache
---> f466e9893c75
Step 6/7 : COPY ["ldapRoot.cer", "/tmp"]
---> 64dda06d6ed4
Step 7/7 : RUN cd /tmp && keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias ldapcert -file ldapRoot.cer
---> Running in 95309101bec9
Certificate was added to keystore
Removing intermediate container 95309101bec9
---> cff58441080f
Successfully built cff58441080f
Successfully tagged docker_jenkins:latest
Recreating docker_jenkins_1 ... done
知道我做错了什么吗?
我相信您刚刚创建了一个新的密钥库文件,/tmp/cacerts
而不是更新 /etc/ssl/certs/java/cacerts
。如果将 keytool
导入命令更新为指向 /etc/ssl/certs/java/cacerts
会怎样?或者,entrypoint.sh
是否使用 /tmp/cacerts
作为您的信任库?