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认证。

遵循的步骤:

  1. 将 Crowd 服务器的证书链导入到位于 $JAVA_HOME/jre/lib/security/cacerts 的 Java Trust store,因此 Jenkins 信任 Crowd Server。

  2. 使用私钥和证书在jenkins中创建一个keystore(JKS)用于客户端认证。

  3. 修改 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。来自日志的信息,

  1. Server Hello 通过,并提供它信任的 CA 列表,其中显示了 Atlassian crowd 服务器。在 jenkins 启动期间,我还可以看到它将证书添加为受信任的。

  2. 但是当 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 进行身份验证。