在jenkins中配置LDAP全局设置

时间:2018-08-30 08:16:58

标签: jenkins ldap jenkins-plugins

我已经设置了一个Jenkins实例,并且正在尝试设置LDAP并收到此错误

  

无法连接到ldaps://server.domain.com:636:   javax.naming.CommunicationException:server.domain.com:636 [Root   异常是javax.net.ssl.SSLHandshakeException:   sun.security.validator.ValidatorException:PKIX路径构建失败:   sun.security.provider.certpath.SunCertPathBuilderException:无法执行   找到到所请求目标的有效认证路径]

目标服务器正在使用自签名证书。有没有办法禁用认证检查?在另一个Web服务器实例中,我们使用

运行它
AUTH_LDAP_GLOBAL_OPTIONS = {
ldap.OPT_X_TLS_REQUIRE_CERT: False }

使用Jenkins时会有类似的选择吗?

1 个答案:

答案 0 :(得分:1)

您可以覆盖Java默认的SSL工厂,例如https://plugins.jenkins.io/skip-certificate-check

或者您可以通过获取证书公钥并将其导入到您的./jre/lib/security/cacert信任库中来信任证书。

export JAVA_HOME='/path/to/your/jre'
export LDAPHOST='LDAPHOST01.domain.ccTLD'
export LDAPSSLPORT='636'
export CERTFILENAME='/tmp/ldapcert.cer'

echo "" | openssl s_client -connect $LDAPHOST:$LDAPSSLPORT 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > $CERTFILENAME
keytool -import -trustcacerts -alias $LDAPHOST -file $CERTFILENAME -keystore $JAVA_HOME/lib/security/cacerts

导入证书时,将要求您提供密钥库密码。默认值为'changeit'...否则,无论您将其更改为什么。将显示有关证书的详细信息,并且将询问您是否真的要信任证书。

[lisa@linux02 checkSSLCertExpiry]# keytool -import -trustcacerts -alias $LDAPHOST -file $CERTFILENAME -keystore $JAVA_HOME/lib/security/cacerts
Enter keystore password:
    Owner: CN=LDAPHOST01
    Issuer: CN=LDAPHOST01
    Serial number: 3a2542463f2d59bb4018f9e9179dd6a8
    Valid from: Mon Jun 02 16:55:08 EDT 2014 until: Sun Jun 02 16:55:08 EDT 2019
    Certificate fingerprints:
             MD5:  C3:33:62:B4:A8:30:05:54:3A:F9:AE:99:66:35:EB:22
             SHA1: FA:C2:7B:5D:BF:74:05:58:EF:37:F1:AD:8D:8B:DF:02:93:4C:D8:7E
             SHA256: BE:D6:DF:A9:4F:82:6B:AF:2C:C7:45:9B:B7:A4:0A:B4:9A:81:DB:8E:49:A2:38:16:49:83:F7:4C:D5:EC:61:E0
    Signature algorithm name: SHA1withRSA
    Subject Public Key Algorithm: 2048-bit RSA key
    ...
    #4: ObjectId: 2.5.29.17 Criticality=false
    SubjectAlternativeName [
      DNSName: LDAPHOST01
      DNSName: LDAPHOST01.domain.ccTLD
    ]
    Trust this certificate? [no]:  yes
    Certificate was added to keystore

用于验证证书在商店中存在的keytool命令:

    [lisa@linux02 checkSSLCertExpiry]# keytool -list -keystore $JAVA_HOME/lib/security/cacerts -alias $LDAPHOST
    Enter keystore password:
    LDAPHOST01.domain.ccTLD, Sep 28, 2018, trustedCertEntry,
    Certificate fingerprint (SHA1): FA:C2:7B:5D:BF:74:05:58:EF:37:F1:AD:8D:8B:DF:02:93:4C:D8:7E

覆盖Java的默认信任机制是一劳永逸的,但是显然会删除与验证证书有关的所有安全性。信任LDAP服务器的证书意味着您每次更新证书时都需要知道,并且需要将 new 证书导入到cacerts文件中。

为避免目录服务器证书过期时,身份验证每年或每两年失败一次,我设置了一个具有相当长的有效期(约10年)的证书颁发机构(CA)。您可以使用专用的PKI基础结构或仅使用OpenSSL进行此操作。通过将CA的公钥导入cacerts,您可以信任针对CA颁发的任何证书。 所以如果目录证书每年更新一次,则您无需执行任何操作。在更换CA证书的十年中,您需要将新的CA证书添加到商店中。