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

时间:2018-05-14 09:04:59

标签: ssl jenkins client-certificates

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

是否有可能让Jenkins使用SSL客户端证书来对这些负载均衡器后面的端点进行调用? 如下所示:

詹金斯打电话--- present_SSL_client_cert ---> LB(验证客户证书)--->端点

提前谢谢!

1 个答案:

答案 0 :(得分: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测试了此设置,它们都使用客户端证书auth在nginx反向代理后面。

使用JENKINS_HTTPS_KEYSTORE之类的env变量有时可以看到配置Jenkins使用https本身, NOT 对于客户端身份验证没有作用。我没有做进一步的调查,但是我假设我使用的插件OpenId Connect Authentication Plugin不支持该变量,而是使用了基本的Java功能。