在大多数情况下,您将在具有内部DNS的私有环境中使用Jenkins,并且可以从各个组织获取内部SSL证书。您还可以使用OpenSSL创建自签名SSL证书。另外,您可以使用服务来加密有效的SSL证书。但是这些证书必须每三个月更新一次。(本例使用自签名证书)在项目环境中启用SSL来保护Jenkins至关重要,本文主要演示如何为Jenkins配置自签名的SSL证书。
创建自签名证书
默认情况下,所有基于Linux和Unix的系统上都存在Openssl实用程序。
## 建立一个openssl目录mkdir openssl && cd openssl## 生成CA私钥文件openssl genrsa -out ca.key 2048## 使用CA密钥生成CA x509证书文件。定义证书的有效性。输入证书详细信息,例如通用名称,位置,国家/地区等。openssl req -x509 -new -nodes -key ca.key -sha256 -days 1825 -out ca.crt## 创建服务器私钥openssl genrsa -out server.key 2048## 使用私钥生成CSRopenssl req -new -key server.key -out server.csr## 使用ca.key,ca.crt和server.csr生成服务器SSL证书openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 10000## 出现以下信息Signature oksubject=/C=CN/L=Default City/O=devops/CN=jenkins.devops.comGetting CA Private Key
将SSL密钥转换为PKCS12格式
openssl pkcs12 -export -out jenkins.p12 \-passout 'pass:123456' -inkey server.key \-in server.crt -certfile ca.crt -name jenkins.devops.com
将PKCS12转换为JKS格式
keytool -importkeystore -srckeystore jenkins.p12 \-srcstorepass '123456' -srcstoretype PKCS12 \-srcalias jenkins.devops.com -deststoretype JKS \-destkeystore jenkins.jks -deststorepass '123456' \-destalias jenkins.devops.com
将JKS添加到Jenkins路径
mkdir /etc/jenkinscp jenkins.jks /etc/jenkins/## 更改密钥和文件夹的权限。chown -R jenkins: /etc/jenkinschmod 700 /etc/jenkinschmod 600 /etc/jenkins/jenkins.jks
修改Jenkins的配置
如果你用采用rpm方式安装的Jenkins,可以直接编辑/etc/sysconfig/jenkins配置文件。然后重启Jenkins。
[root@devops jenkinsssl]# grep "HTTPS" /etc/sysconfig/jenkins# HTTPS port Jenkins is listening on.JENKINS_HTTPS_PORT="8443"JENKINS_HTTPS_KEYSTORE="/etc/jenkins/jenkins.jks"# Password to access the keystore defined in JENKINS_HTTPS_KEYSTORE.JENKINS_HTTPS_KEYSTORE_PASSWORD="123456"# IP address Jenkins listens on for HTTP
如果您是在测试环境类似于java -jar jenkins.war 直接启动的,可以参考以下指令进行配置。(其实就是将参数直接定义在启动参数中)
#!/bin/bashexport JENKINS_HOME=~/jenkins#nohup java -jar jenkins.war --httpPort=8080 &nohup java -Dcom.sun.akuma.Daemon=daemonized \ -Djava.awt.headless=true \ -jar jenkins.war \ --httpPort=8080 \ --httpsPort=8443 \ --httpsKeyStore=/Users/zeyang/jenkins/jenkins.jks \ --httpsKeyStorePassword=123456 \ --httpsListenAddress=0.0.0.0 \ --debug=9 \ --handlerCountMax=100 \ --handlerCountMaxIdle=20 \ --accessLoggerClassName=winstone.accesslog.SimpleAccessLogger \ --simpleAccessLogger.format=combined &
进行HTTPS测试
更多精彩关注 DevOps云学堂
持续交付流水线中的消息传递与协作实现
Mattermost+Jira集成加速DevOps工作流程
基于Kubernetes部署MatterMost实践
ChatOps实践-GitLab项目通知与协作实现
使用GitLabCI模板库的流水线优化实践
基于GitLab实现端到端DevOps流水线实践