jenkins - 在 jenkins 中配置 LDAP 全局设置
问题描述
我已经设置了一个 Jenkins 实例,并且正在尝试设置 LDAP 并收到此错误
无法连接到 ldaps://server.domain.com:636 : javax.naming.CommunicationException: server.domain.com:636 [根异常是 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 时是否有类似的选项?
解决方案
您可以覆盖 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 输入密钥库密码: 所有者:CN=LDAPHOST01 颁发者:CN=LDAPHOST01 序列号:3a2542463f2d59bb4018f9e9179dd6a8 有效期:2014 年 6 月 2 日星期一 16:55:08 EDT 至:2019 年 6 月 2 日星期日 16:55:08 EDT 证书指纹: 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 签名算法名称:SHA1withRSA 主题公钥算法:2048 位 RSA 密钥 ... #4:ObjectId:2.5.29.17 关键性=假 主题替代名称 [ DNS 名称:LDAPHOST01 DNS名称:LDAPHOST01.domain.ccTLD ] 相信这个证书?[否]:是的 证书已添加到密钥库
用于验证证书是否存在于商店中的 keytool 命令:
[lisa@linux02 checkSSLCertExpiry]# keytool -list -keystore $JAVA_HOME/lib/security/cacerts -alias $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 证书添加到存储中。
推荐阅读
- c - 如何仅列出 C 目录中用户提供的文件名?
- python - Mongodb使用$pull从嵌套数组中删除对象不使用pymongo
- httprequest - Microsoft Bot Composer 发送 HTTP 请求不接受变量作为 URL 输入
- c# - 如何从另一个区域引用根控制器
- angular - Angular:在 /src/app/app-routing.module.ts 中找不到路由声明
- python - 带有硒等待的异步功能
- c++ - 出现编译错误:我的 main() 函数中的“标识符‘objUser’未定义”
- delphi - Delphi TTaskDialog 显示/隐藏或启动/停止选框进度条
- javascript - Modal will not open on click
- javascript - Vue.js 导入对象