【问题标题】:How can I set up Jenkins CI to use https on Windows?如何设置 Jenkins CI 以在 Windows 上使用 https?
【发布时间】:2011-03-15 15:06:33
【问题描述】:

我们最近在 Windows 上设置了 Jenkins CI 服务器。现在为了使用 Active Directory 身份验证,我想要求 https (SSL/TLS) 进行访问。鉴于此设置,推荐的方法是什么?

【问题讨论】:

  • 您是否在 Tomcat 等 servlet 容器下运行 Jenkins?
  • 不,只是作为 Windows 服务(我猜它仍然使用 Winstone 作为 servlet 容器?)。

标签: windows ssl https jenkins continuous-integration


【解决方案1】:

运行:

keytool -genkey -keyalg RSA -keystore Jenkins.jks -alias [Name of website] -keysize 2048

请记住First and last name 是网站网址,并且应该是小写字母。示例:

build.jenkins-ci.org

State or province 不能缩写。

运行:

keytool -certreq -Keystore jenkins.jks -alias [Name of website] -file jenkins.csr -keysize 2048

Jenkins.csr 发送给您的证书提供者并请求具有.p7b 扩展名并以以下开头的PKCS#7 证书:

-----BEGIN PKCS #7 SIGNED DATA-----

注意:试用证书通常不以.p7b 格式提供,但您可以使用此报告成功但对我不起作用的工具合并.cer 文件。 (https://www.sslshopper.com/ssl-converter.html)

运行:

keytool -import -trustcacerts -file jenkins.p7b -keystore jenkins.jks -alias [Name of website]

将 Jenkins.xml 中的 arguments 节点预先更改为以下内容。

<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=-1 --httpsPort=443 --httpsKeyStore="%BASE%\Cert\Jenkins.jks" --httpsKeyStorePassword=[Cert password from step 1]</arguments>

疑难解答:

  • 如果 Jenkins 没有开始读取 Jenkins.err.log 的最后几行。
  • 如果 Jenkins 由于 Jenkins.xml 的问题而没有启动,请将 (奇怪的 Windows 连字符)字符替换为实际的 -(ASCII 连字符)。
  • 如果 Jenkins 启动但证书仍然显示为错误,请确保 [Name of website] 是没有 https: 示例的实际 URL:https://build.jenkins-ci.org 将是 build.jenkins-ci.org
  • 如果这不是问题,请使用KeyStore Explorer 检查.jks 文件。 “证书层次结构”应该表明每个证书都嵌套在另一个证书中;这是为了说明证书链。如果证书彼此相邻显示,则不正确。
  • 如果它不会在特定端口(例如 443)上启动,则验证 IIS 或其他应用当前未使用该端口。
  • 如果您可以在托管它的 PC 上看到该网站,但在另一台 PC 上看不到,请确认您没有被防火墙阻止。

【讨论】:

  • 我只是想评论一下,当我需要从头开始设置新的 Jenkins 构建服务器时,这组指令对我来说完美无缺。
  • 嗨,我知道这是旧的,但有没有办法将 .crt 文件转换为 jks?
【解决方案2】:

转到您的 %JENKINS_HOME% 并修改 jenkins.xml。在您看到--httpPort=8080 的地方将其更改为--httpPort=-1 --httpsPort=8080 当然,您可以将端口设置为您想要的任何东西,但是在我的测试中(不久前,它可能已经改变)如果您不保留--httpPort=&lt;something&gt;,那么詹金斯将永远使用8080。所以如果你只是将--httpPort=8080更改为--httpsPort=8080,8080端口仍然会使用http。

另外,如果您想使用自己的证书,本页底部有一些说明。

http://wiki.jenkins-ci.org/display/JENKINS/Starting+and+Accessing+Jenkins

【讨论】:

  • 谢谢乔治,我已经完成了您链接到的页面上的所有步骤。此时,我的 Jenkins 文件夹中有一个 winstone.ks 密钥库(并且可以使用 java keytool 验证其内容)。但是,当我重新启动 Jenkins 时,我得到了这个:[Winstone 2011/03/16 15:44:21] - Error during HTTPS listener init or shutdown java.security.UnrecoverableKeyException: Cannot recover key,然后是堆栈跟踪的其余部分。我确定密钥库密码是正确的。有什么想法吗?
  • 为了结束这个话题,我遇到的问题是密钥库密码和证书密码(在生成 CSR 时输入)不同。一旦我使用与证书密码匹配的密码重新创建了密钥库,问题就解决了。
  • 注意那些希望在 CentOS 机器上做同样事情的人,可以对/etc/sysconfig/jenkins中的文件进行建议的更改
  • 另外一件事是我需要设置 --httpPort=-1 否则它不起作用。
  • 您肯定还想生成一个 JKS 格式的自签名证书,如 that other answer 中所述,并通过将 --httpsKeyStore=path/to/keystore --httpsKeyStorePassword=keystorePassword 添加到“jenkins.xml”中来使用它,如 @ 中所述987654323@。否则 Jenkins 似乎每次重新启动时都会生成一个新证书,每次指纹变化时都会触发 Firefox 中的“不受信任的连接”对话框。
【解决方案3】:

第 1 步:在您的 jenkin 名称上创建公共和私有证书(如果不是,则将它们转换为密钥文件) 步骤2:将公共证书导入浏览器证书管理器(导入所有选项卡) 第三步:使用包含公钥和私钥的 JKS 文件托管您的 jenkin。

步骤参考“Enable HTTPS in jenkins?

【讨论】:

    猜你喜欢
    • 2018-10-05
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    相关资源
    最近更新 更多