Jenkins 2 和 Atlassian Crowd(crowd2 插件)与双向 SSL 集成
Jenkins 2 and Atlassian Crowd (crowd2 Plugin) Integration with two-way SSL
我正在尝试使用 Jenkin 的 crowd 2 插件将 AWS 上的 Jenkins(版本 2.121.2)运行 连接到本地 Atlassian Crowd Server(版本 3.1.2)。 Crowd服务器需要双向SSL认证。
遵循的步骤:
将 Crowd 服务器的证书链导入到位于 $JAVA_HOME/jre/lib/security/cacerts 的 Java Trust store,因此 Jenkins 信任 Crowd Server。
使用私钥和证书在jenkins中创建一个keystore(JKS)用于客户端认证。
修改 jenkins 启动参数 (/etc/default/jenkins) 以使用 Trust store 和 Keystore。我已经尝试了以下两种变体。
变体 1:
JAVA_ARGS="-Djavax.net.debug=ssl -Djava.awt.headless=true
-Djavax.net.ssl.trustStore=/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/security/cacerts
-Djavax.net.ssl.trustStorePassword=changeit
-Djavax.net.ssl.keyStore=/var/lib/jenkins/identity.jks
-Djavax.net.ssl.keyStorePassword=changeit"
变体 2:
# JVM Arguments
JAVA_ARGS="-Djavax.net.debug=ssl -Djava.awt.headless=true
-Djavax.net.ssl.trustStore=/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/security/cacerts
-Djavax.net.ssl.trustStorePassword=changeit"
# Jenkins arguments
JENKINS_ARGS="--webroot=/var/cache/$NAME/war
--httpPort=$HTTPS_PORT
--httpsKeyStore=/var/lib/jenkins/identity.jks
--httpsKeyStorePassword=changeit"
在 jenkins 的插件配置部分填写详细信息并尝试建立连接后,我在 jenkins 日志中收到 hand_shake failure
。来自日志的信息,
Server Hello 通过,并提供它信任的 CA 列表,其中显示了 Atlassian crowd 服务器。在 jenkins 启动期间,我还可以看到它将证书添加为受信任的。
但是当 jenkins 响应来自 Crowd 的验证时,它并没有从密钥库发送客户端 key/certificate。下面是日志的摘录。
CN=cloud.company.com, OU=OUnit, O=Org, L=City, ST=State, C=Country
ServerHelloDone
Warning: no suitable certificate found - continuing
without client authentication
Certificate chain <Empty>
我不确定使用 Crowd2 插件是否可行,或者我是否做错了什么。我看过这个 issue ,但是如果这可能与否,没有明确的答案。
非常感谢help/direction。
所以,问题出在 Crowd 2 Jenkins 插件上。该插件的版本 2 最近在 3 个月前发布,我正在使用它。但是,在将插件降级到 1.8 版本后,我能够通过 Crowd Server 进行身份验证。
我正在尝试使用 Jenkin 的 crowd 2 插件将 AWS 上的 Jenkins(版本 2.121.2)运行 连接到本地 Atlassian Crowd Server(版本 3.1.2)。 Crowd服务器需要双向SSL认证。
遵循的步骤:
将 Crowd 服务器的证书链导入到位于 $JAVA_HOME/jre/lib/security/cacerts 的 Java Trust store,因此 Jenkins 信任 Crowd Server。
使用私钥和证书在jenkins中创建一个keystore(JKS)用于客户端认证。
修改 jenkins 启动参数 (/etc/default/jenkins) 以使用 Trust store 和 Keystore。我已经尝试了以下两种变体。
变体 1:
JAVA_ARGS="-Djavax.net.debug=ssl -Djava.awt.headless=true
-Djavax.net.ssl.trustStore=/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/security/cacerts
-Djavax.net.ssl.trustStorePassword=changeit
-Djavax.net.ssl.keyStore=/var/lib/jenkins/identity.jks
-Djavax.net.ssl.keyStorePassword=changeit"
变体 2:
# JVM Arguments
JAVA_ARGS="-Djavax.net.debug=ssl -Djava.awt.headless=true
-Djavax.net.ssl.trustStore=/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/security/cacerts
-Djavax.net.ssl.trustStorePassword=changeit"
# Jenkins arguments
JENKINS_ARGS="--webroot=/var/cache/$NAME/war
--httpPort=$HTTPS_PORT
--httpsKeyStore=/var/lib/jenkins/identity.jks
--httpsKeyStorePassword=changeit"
在 jenkins 的插件配置部分填写详细信息并尝试建立连接后,我在 jenkins 日志中收到 hand_shake failure
。来自日志的信息,
Server Hello 通过,并提供它信任的 CA 列表,其中显示了 Atlassian crowd 服务器。在 jenkins 启动期间,我还可以看到它将证书添加为受信任的。
但是当 jenkins 响应来自 Crowd 的验证时,它并没有从密钥库发送客户端 key/certificate。下面是日志的摘录。
CN=cloud.company.com, OU=OUnit, O=Org, L=City, ST=State, C=Country ServerHelloDone Warning: no suitable certificate found - continuing without client authentication Certificate chain <Empty>
我不确定使用 Crowd2 插件是否可行,或者我是否做错了什么。我看过这个 issue ,但是如果这可能与否,没有明确的答案。
非常感谢help/direction。
所以,问题出在 Crowd 2 Jenkins 插件上。该插件的版本 2 最近在 3 个月前发布,我正在使用它。但是,在将插件降级到 1.8 版本后,我能够通过 Crowd Server 进行身份验证。