Jenkins + LDAPS + самоподписные сертификаты
Проблема
При попытке сконфигурировать Jenkins для подключения к LDAP серверу с использованием шифрования данных получаем ошибку:
Unable to connect to ldaps://ldap.example.com:636 : javax.naming.CommunicationException: anonymous bind failed: ldap.example.com:636 [Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]
javax.naming.CommunicationException: anonymous bind failed: ldap.example.com:636 [Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]
at com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:198)
at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2788)
at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:319)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:192)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:210)
at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:153)
at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:83)
Она говорит нам, что Java не осилила TLS (SSL) из-за того, что у нас самоподписной сертификат.
Лечение
Заходим на сервер с Jenkins (если у вас он в доккере, то делайте все, что описано ниже внутри доккер контейнера).
Скачиваем InstallCert.java:
$ wget https://raw.githubusercontent.com/escline/InstallCert/master/InstallCert.java
Устанавливаем java компилятор:
$ sudo apt install openjdk-8-jdk-headless
Если вы используете 9-ю версию, то установите ее.
Собираем:
javac InstallCert.java
Добавляем сертификат в хранилище:
java InstallCert ldap.example.com:636
Вывод консоли будет содержать нечто похожее на:
[email protected]:~$ java InstallCert ldap.example.com:636
Loading KeyStore /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/jssecacerts...
Opening connection to ldap.example.com:636...
Starting SSL handshake...
No errors, certificate is already trusted
Server sent 1 certificate(s):
1 Subject EMAILADDRESS=[email protected], CN=ldap.example.com, OU=Company, O=Company Inc., L=City, ST=State, C=RU
Issuer EMAILADDRESS=[email protected], CN=ldap.example.com, OU=Company, O=Company Inc., L=City, ST=State, C=RU
sha1 16 24 4e 25 af a4 0f 81 8a 63 2e da be 6f d3 0f 6e 0b 1b 0f
md5 44 8f ed d6 f8 34 c9 13 ef 8d 66 e2 03 f6 2b a9
Enter certificate to add to trusted keystore or 'q' to quit: [1]
1
[
[
Version: V1
Subject: EMAILADDRESS=[email protected], CN=ldap.example.com, OU=Company, O=Company Inc., L=City, ST=State, C=RU
Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5
Key: Sun RSA public key, 2048 bits
modulus: 27876913140592764992645624990000862317594924425...
public exponent: 65537
Validity: [From: Thu Dec 13 14:50:14 UTC 2012,
To: Sun Dec 11 14:50:14 UTC 2022]
Issuer: EMAILADDRESS=[email protected], CN=ldap.example.com, OU=Company, O=Company Inc., L=City, ST=State, C=RU
SerialNumber: [ ad5df5fa 3eefe865]
]
Algorithm: [SHA1withRSA]
Signature:
0000: 77 48 DE 49 5C 83 45 FE F9 68 F2 98 97 DF 20 51 wH.I\.E..h.... Q
0010: 5E 23 87 28 83 A8 27 71 EF AA 93 79 A3 91 6A 1A ^#.(..'q...y..j.
0020: B3 8B AB 0D CE 90 A8 3F EF AC 2C A1 15 CA 7B 7C .......?..,.....
0030: B8 77 C8 A0 6A DA E1 B9 18 D7 92 E7 7E 6D 39 9C .w..j........m9.
0040: 72 51 B6 24 66 2C 26 EC B8 61 D7 FF 6F F5 E8 36 rQ.$f,&..a..o..6
0050: C9 E0 1B 4E 40 77 3D EB 1A 86 7E C2 44 2F 3B 5F [email protected]=.....D/;_
0060: CA 49 F1 7C C3 58 68 AE 43 CA AD 0E 19 61 7D 90 .I...Xh.C....a..
0070: 35 17 07 80 2A 33 D2 B3 1B 4F FD 15 44 A2 02 F6 5...*3...O..D...
0080: 66 E1 C4 2E 35 30 9B 7E EE 39 A6 D9 81 ED C4 C7 f...50...9......
0090: B1 90 24 13 94 20 F6 F5 1B 87 8D 72 0A B5 99 7B ..$.. .....r....
00A0: 2F D3 64 21 12 EC BF C6 01 B1 99 98 15 04 62 2F /.d!..........b/
00B0: AC DC 9F AD 95 92 2B 4C 07 E6 08 20 3A 8E 7B FD ......+L... :...
00C0: E1 37 5B C0 53 60 5F 3C 6B D8 EB A8 82 CB F8 BA .7[.S`_<k.......
00D0: 2F 0B C1 05 94 A5 87 29 BA E1 78 EF 35 72 9B 4D /......)..x.5r.M
00E0: 36 5B 0E C5 8A B1 6C 98 DC 50 D2 33 65 54 E1 42 6[....l..P.3eT.B
00F0: 18 28 7A A1 59 EB E8 98 D9 5E 96 5E 8D 85 7F 68 .(z.Y....^.^...h
]
Added certificate to keystore 'jssecacerts' using alias 'ldap.example.com-1'
[email protected]:~$
Добавляем хранилище в Java:
$ sudo cp jssecacerts /usr/lib/jvm/default-java/jre/lib/security/
Перезапускаем Jenkins и настраиваем подключение к LDAP.
Комментарии: