我已经设置了一个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时会有类似的选择吗?
答案 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证书添加到商店中。