お疲れ様です!Jenkins への接続を SSL にします。Jenkins 自体を SSL 対応しつつ nginx を使ってリバースプロキシでの SSL 接続をしてみます。
サーバー証明書の作成管理は自己認証局(CA)と自己証明書(SSL)を Windows 版の XCA で管理してみる を参考にしてください。
PKCS #12(*.p12) 証明書ファイル作成
作成したサーバー証明書を PKCS #12(*.p12) 形式でエクスポートします。
パスワードを指定して作成します。
Jenkins 起動設定ファイルの変更
Running Jenkins with native SSL / HTTPS – Jenkins – Jenkins Wiki を参考に jenkins.xml ファイルを変更します。arguments タグに下記のオプションを追記します。それぞれ環境に応じで変更してください。
--httpsPort=443 --httpsKeyStore="C:\ssl\ci01.p12" --httpsKeyStorePassword="パスワード"
もし http 接続を無効にするときは httpPort オプションを変更します。
--httpPort=-1
Jenkins を再起動して https 接続できるか確認します。
接続できたら「Jenkinsの管理」‐「システムの設定」‐「Jenkinsの位置」‐「Jenkins URL」を https に変更しておきます。
スレーブのSSL接続
本体を変更したらスレーブの方も変更しておきます。 ※ここではJNLPエージェント経由で接続を前提とします。
jenkins-slave.xml ファイルの -jnlpUrl オプション値を https に変更します。
SSL証明書が自己証明書の時は検証エラーで起動できなくなるので次のオプションを追記します。
-noCertificateCheck
nginx リバースプロキシ
1つのサーバーでポートを 443 で複数サービス稼働させるときはサブディレクトリで分けますのでその場合の設定です。
ここまでの設定で事足りるのであればここからは不要です。
ここでは
nginx ポート: 443
jenkins ポート: 8443
jenkins サブディレクトリ: /jenkins
とします。
Jenkins 設定
jenkins.xml ファイルの arguments タグを修正します。
SSL ポートの変更
--httpsPort=8443
サブディレクトリの指定を追加
--prefix=/jenkins
nginx 設定
nginx.conf ファイルを変更します。
server.crt と server.key は xca からエクスポートしておき、パスは環境に合わせてください。
http {
・・・省略・・・
server {
listen 443 ssl;
server_name ci01;
ssl_certificate "C:/bin/ssl/server.crt";
ssl_certificate_key "C:/bin/ssl/server.key";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ssl_prefer_server_ciphers on;
location /jenkins {
proxy_pass https://localhost:8443/jenkins/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
}
}
}
nginx 、 Jenkins を再起動して https 接続できるか確認します。
接続できたら「Jenkinsの管理」‐「システムの設定」‐「Jenkinsの位置」‐「Jenkins URL」をサブディレクトリ指定に変更しておきます。