在 Jenkins 中啟用 HTTPS
一、概述
Jenkins 是一個開源且易於使用的基於 Java 的 Web 服務器,通常用於開發持續集成和持續交付 (CI/CD) 管道。
在本教程中,我們將介紹通過配置 SSL 在 Jenkins 服務器上啟用 HTTPS 的過程。
2. 使用 Jenkins SSL 配置
要使用 HTTPS,我們必須更改 Jenkins 服務器的內部 SSL 設置。
2.1。生成 SSL 證書
首先,我們需要生成 SSL 證書和密鑰庫。在這裡,我們將使用 OpenSSL 來創建兩者。
讓我們從在我們的 CentOS 機器上安裝 OpenSSL 開始:
$ sudo yum install openssl
在下一步中,我們將使用 OpenSSL 工俱生成 SSL 公鑰和私鑰:
$ openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem
Generating an RSA private key
.....................................+++++
..................+++++
writing new private key to 'key.pem'
Email Address []:
這裡生成了key.pem
密鑰和certificate.pem
自簽名證書。接下來,讓我們通過將它們轉換為.p12
keystore
來合併這兩個文件:
$ openssl pkcs12 -inkey key.pem -in certificate.pem -export -out certificate.p12
重要的是,我們可以稍後使用這兩個.pem
文件,因此我們可能想要保存它們。現在讓我們使用keytool
導入.p12
文件並將其轉換為.jks
keystore
:
$ keytool -importkeystore -srckeystore ./certificate.p12 -srcstoretype pkcs12 -destkeystore jenkinsserver.jks -deststoretype JKS
Entry for alias 1 successfully imported.
Import command completed: 1 entries successfully imported, 0 entries failed or cancelled
Warning:
現在,我們可以在 Jenkins 設置中使用jenkinsserver.jks
。
2.2.將 JKS 文件添加到 Jenkins 路徑
重要的是,我們需要確保jenkinsserver.jks
位於 Jenkins 可以訪問它的地方。 JENKINS_HOME
(通常是/var/lib/jenkins
)是一個不錯的選擇:
$ sudo cp jenkinsserver.jks /var/lib/jenkins/
默認情況下, jenkins
用戶可以訪問/var/lib/jenkins/
路徑。但是,我們必須更改.jks
文件的所有者:
$ sudo chown jenkins:jenkins /var/lib/jenkins/jenkins.jks
現在,Jenkins 已設置為正確的密鑰庫文件以進行安全 SSL 身份驗證。
2.3.為 SSL 通信配置 Jenkins
為了使用 SSL 設置 Jenkins,我們需要使用 HTTPS keystore
、HTTPS 端口和密碼。讓我們使用/etc/systemd/system/jenkins.service
文件中的變量來設置每個變量:
Environment="JENKINS_HTTPS_PORT=8443"
Environment="JENKINS_HTTPS_KEYSTORE=/var/lib/jenkins/jenkinsserver.jks"
Environment="JENKINS_HTTPS_KEYSTORE_PASSWORD=baeldung"
至此,在 Jenkins 中設置了 HTTPS。
2.4.重啟 Jenkins 服務
到目前為止,我們已經對配置進行了所有更改。為了應用它們,我們重新加載守護進程並重啟 Jenkins:
$ sudo systemctl daemon-reload
$ sudo systemctl restart jenkins.service
現在,我們的 SSL 證書對Jenkins 服務器有效。因此,HTTPS 啟動並運行,保護我們的數據。
2.5. Jenkins 服務器的驗證
當然,現在可以通過 HTTP 和 HTTPS 訪問 Jenkins。為了說明,讓我們使用 HTTPS 端口訪問 Jenkins 服務器:
我們可以看到 Jenkins 服務器使用 HTTPS 在8443
端口上運行,由 SSL 保護。
3. 使用反向代理
我們還可以在 Jenkins 主服務器前運行reverse proxy server
來增加安全性。此外,例如,在 HAProxy 後面運行 Jenkins 提供了一個更加用戶友好的 URL。代理是一種防火牆,可進一步保護對後端服務器的訪問。
我們可以運行 HAProxy、Nginx、Apache 或 Squid 作為我們的代理服務器。在這裡,我們使用 HAProxy 作為一個相對標準的選擇。
3.1。安裝和配置 HAProxy
使用HAProxy ,我們可以將請求重定向到 Jenkins。讓我們在 Linux 機器上安裝 HAProxy:
$ yum install haproxy
接下來,讓我們更改一些默認設置。首先,我們將創建一個監聽所有連接的前端節點:
frontend http-in
bind *:80
bind *:443 ssl crt /etc/haproxy/haproxy.pem
mode http
use_backend jenkins if { path_beg / }
在這裡,重定向通過use_backend
轉到 Jenkins 後端。當然,我們還要在配置中添加一個 Jenkins 後端節點,這樣 HAProxy 才能正常轉發:
backend jenkins
server jenkins1 127.0.0.1:8080
上面,我們使用了haproxy.pem
文件,它很容易創建:
$ cat certificate.pem key.pem > haproxy.pem
在這裡,我們結合了之前的certificate.pem
和key.pem
來生成haproxy.pem
文件。最後,讓我們重新加載守護進程並重啟haproxy
服務:
$ sudo systemctl daemon-reload
$ sudo systemctl restart haproxy
此時,SSL 應該可以通過 HAProxy 在 Jenkins 服務器上使用。
3.2.確認
到目前為止,HAProxy 應該已經啟動並運行,重定向到 Jenkins。為了說明,讓我們訪問 Jenkins 服務器並驗證 HTTPS 連接:
正如我們所見,Jenkins 使用 HTTPS 進行安全訪問,無需任何自定義端口。
4。結論
在本文中,我們按照步驟在 Jenkins 服務器上啟用 SSL 安全性。最初,我們學習瞭如何配置 Jenkins 本身的 HTTPS 設置。最後,為了進一步保護 SSL 連接,我們添加了一個反向代理服務器,使用 Jenkins 作為後端。