Jenkins在呼叫其他端点时使用客户端证书

问题描述 投票:0回答:1

我有一个Jenkins实例,我需要从该实例调用位于负载均衡器后面的其他服务/端点。此负载平衡器需要并执行SSL客户端证书验证。

是否可以让Jenkins使用SSL客户端证书进行其对驻留在该负载均衡器后面的那些端点的调用?如下所示:

Jenkins呼叫--- present_SSL_client_cert ---> LB(验证客户端证书)--->端点

谢谢您!

ssl jenkins client-certificates
1个回答
0
投票

[要让Jenkins将客户端证书用于其他端点,请使用]启动Jenkins>

JAVA_OPTS="-Djavax.net.ssl.keyStorePassword=changeme -Djavax.net.ssl.keyStoreType=pkcs12 -Djavax.net.ssl.keyStore=/cert/jenkins.p12"

我使用了普通的客户端证书:

openssl req -nodes -newkey rsa:4096 -days 365 -keyout cert/jenkins.key -out cert/jenkins.csr -subj "/C=DE/ST=somewhere/L=inCity/O=someOrg/OU=someBla/CN=jenkins"

签名:

openssl x509 -req -days 365 -in ../jenkins/cert/jenkins.csr -CA ca/ca.crt -CAkey ca/ca.key -out ../jenkins/cert/jenkins.crt -passin env:CA_KEY

并将其转换为PKCS12:

openssl pkcs12 -nodes -export -in cert/jenkins.crt -inkey cert/jenkins.key -out cert/jenkins.p12 -certfile ../nginx/ca/ca.crt -passout pass:changeme

重要的是使用非空的keyStorePassword,否则Jenkins抛出异常java.security.UnrecoverableKeyException: Get Key failed: null

此外,我还将服务器证书添加到Java密钥库中:

keytool -import -alias server.domain.de -keystore /usr/local/openjdk-8/jre/lib/security/cacerts -file /root/server.crt -noprompt -storepass changeit

[我已经使用jenkins:lts docker容器和keycloak测试了此设置,它们都使用客户端证书身份验证在nginx反向代理后面。

使用诸如JENKINS_HTTPS_KEYSTORE之类的env变量有时可以看到,用于配置Jenkins使用https本身,对客户端身份验证有效[[NOT

。我没有进一步调查,但是我假设使用的插件OpenId Connect Authentication Plugin不支持此变量,而是使用了基本的Java功能。
© www.soinside.com 2019 - 2024. All rights reserved.