Как добавить корневой сертификат CA в хранилище ключей LDAP в контейнере Jenkins Docker? - PullRequest
0 голосов
/ 30 октября 2019

Я хочу настроить ldaps на Jenkins в контейнере Docker.

Проблема: 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, настройка LDAP через: 389 работает нормально. Я также знаю, что LDAPS работает, так как я настроил ldaps для многих других устройств с этого сервера.
  • Прочитайте следующие источники:
  • Следуя инструкциям из этого руководства Как добавить самоподписанный сертификат SSL в Jenkins для LDAPS в Dockerfile?
  • Выполнен tcpdump, извлеченбайтовую строку, преобразовал ее в файл .cer с помощью openssl и скопировал в мой dockerfile. Я знаю, что у меня есть правильный сертификат. Журнал docker-compose показывает, что он копируется, однако, когда я проверяю хранилище ключей, мой сертификат никогда не появляется. Примечание: проверка хранилища ключей, расположенного в / etc / ssl / certs / java / cacerts, это правильное хранилище ключей?

Вот мой dockerfile:

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

Есть идеи, что я делаю не так?

1 Ответ

1 голос
/ 30 октября 2019

Полагаю, вы только что создали новый файл хранилища ключей, /tmp/cacerts вместо обновления /etc/ssl/certs/java/cacerts. Что если вы обновите команду keytool import для указания на /etc/ssl/certs/java/cacerts? Или entrypoint.sh использует /tmp/cacerts в качестве хранилища доверенных сертификатов?

...