在jenkins中配置LDAP全局设置

在jenkins中配置LDAP全局设置,jenkins,ldap,jenkins-plugins,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.validator异常:PKIX路径生成失败: sun.security.provider.ce

我已经设置了一个Jenkins实例,正在尝试设置LDAP,但出现了这个错误

无法连接到ldaps://server.domain.com:636 : javax.naming.CommunicationException:server.domain.com:636[Root] 异常为javax.net.ssl.SSLHandshakeException: sun.security.validator.validator异常:PKIX路径生成失败: sun.security.provider.certpath.SunCertPathBuilderException:无法 查找到请求目标的有效证书路径]

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

AUTH_LDAP_GLOBAL_OPTIONS = {
ldap.OPT_X_TLS_REQUIRE_CERT: False }

使用Jenkins时是否有类似的选项?

您可以像

或者,您可以通过获取证书公钥并将其导入到您的./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 [lisa@linux02checkSSLCertExpiry]#keytool-import-trustcacerts-alias$LDAPHOST-file$CERTFILENAME-keystore$JAVA_HOME/lib/security/cacerts 输入密钥库密码: 所有者:CN=LDAPHOST01 发行人:CN=LDAPHOST01 序列号:3a2542463f2d59bb4018f9e9179dd6a8 有效期:2014年美国东部时间6月2日星期一16:55:08至2019年美国东部时间6月2日星期日16:55:08 证书指纹: 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 签名算法名称:SHA1 WithRSA 主题公钥算法:2048位RSA密钥 ... #4:ObjectId:2.5.29.17临界性=错误 SubjectAlternativeName[ DNSName:LDAPHOST01 DNSName:LDAPHOST01.domain.ccTLD ] 信任这个证书吗?[否]:是的 证书已添加到密钥库 用于验证存储中是否存在证书的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 [lisa@linux02checkSSLCertExpiry]#keytool-列表-密钥库$JAVA_HOME/lib/security/cacerts-别名$LDAPHOST 输入密钥库密码: LDAPHOST01.domain.ccTLD,2018年9月28日,trustedCertEntry, 证书指纹(SHA1):FA:C2:7B:5D:BF:74:05:58:EF:37:F1:AD:8D:8B:DF:02:93:4C:D8:7E 重写Java的默认信任机制是一劳永逸的,但显然会删除验证证书所需的所有安全性。信任LDAP服务器的证书意味着您需要知道每次证书更新时的情况,并且需要将新证书导入到您的cacerts文件中

为了避免目录服务器证书过期时每一两年验证失败一次,我设置了一个有效期相当长(10年左右)的证书颁发机构(CA)。您可以使用专用PKI基础架构或简单的OpenSSL来实现这一点。通过将CA的公钥导入到cacerts中,您信任针对CA颁发的任何证书。因此,如果目录证书每年更新,您无需执行任何操作。在更换CA证书的十年内,您需要将新的CA证书添加到存储中