JenkinsをSSL / httpsで使用する方法


39

yum経由でインストールするJenkinsを実行しているFedoraサーバーがあります。すべてが大丈夫です、でアクセスできますhttp://ci.mydomain.com

しかし、今では、https://ci.mydomain.comユーザー名とパスワードを使用したログインが暗号化されるようにアクセスしたいです。

これどうやってするの?

以下は私の/etc/sysconfig/jenkinsファイルです。Jenkinsを起動しても動作しますが、https://ci.mydomain.comまたはhttp://ci.mydomain.com:443でWebブラウザーを使用してJenkinsにアクセスできません...

## Path:        Development/Jenkins
## Description: Configuration for the Jenkins continuous build server
## Type:        string
## Default:     "/var/lib/jenkins"
## ServiceRestart: jenkins
#
# Directory where Jenkins store its configuration and working
# files (checkouts, build reports, artifacts, ...).
#
JENKINS_HOME="/var/lib/jenkins"

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Java executable to run Jenkins
# When left empty, we'll try to find the suitable Java.
#
JENKINS_JAVA_CMD=""

## Type:        string
## Default:     "jenkins"
## ServiceRestart: jenkins
#
# Unix user account that runs the Jenkins daemon
# Be careful when you change this, as you need to update
# permissions of $JENKINS_HOME and /var/log/jenkins.
#
JENKINS_USER="jenkins"

## Type:        string
## Default:     "-Djava.awt.headless=true"
## ServiceRestart: jenkins
#
# Options to pass to java when running Jenkins.
#
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"

## Type:        integer(0:65535)
## Default:     8080
## ServiceRestart: jenkins
#
# Port Jenkins is listening on.
#
JENKINS_PORT="8080"

## Type:        integer(1:9)
## Default:     5
## ServiceRestart: jenkins
#
# Debug level for logs -- the higher the value, the more verbose.
# 5 is INFO.
#
JENKINS_DEBUG_LEVEL="5"

## Type:        yesno
## Default:     no
## ServiceRestart: jenkins
#
# Whether to enable access logging or not.
#
JENKINS_ENABLE_ACCESS_LOG="no"

## Type:        integer
## Default:     100
## ServiceRestart: jenkins
#
# Maximum number of HTTP worker threads.
#
JENKINS_HANDLER_MAX="100"

## Type:        integer
## Default:     20
## ServiceRestart: jenkins
#
# Maximum number of idle HTTP worker threads.
#
JENKINS_HANDLER_IDLE="20"

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Pass arbitrary arguments to Jenkins.
# Full option list: java -jar jenkins.war --help
#
JENKINS_ARGS="--httpsPort=443 --httpsKeyStore=/root/.keystore --httpsKeyStorePassword=MYPASSWORD"

authbindを使用して1000未満の任意のポートを使用し、jenkinsを非ルートとして実行できます。

回答:


17

このページは、Apache(HTTPSを処理する)の背後に設定するのに役立ちます:https : //wiki.eclipse.org/Hudson-ci/Running_Hudson_behind_Apache

「通常の」リバースプロキシであることに加えて、これが必要になります(そのページに示されているように)。

Header edit Location ^http://www.example.com/hudson/ https://www.example.com/hudson/

2
返信いただきありがとうございます。私はApacheを実行しておらず、Jenkinsを備えたLinuxサーバーしか持っていません。
ティム

3
この場合、証明書を使用してキーストアを作成し、使用するhttpsPort(および関連するパラメーター):groups.google.com/group/jenkinsci-users/browse_thread/thread/…–
ブルーノ

さて、自分の証明書をキーストアに追加しました。しかし、私は今何を呼ぶべきですか?どこでこれを行うべきですか?In any case: if I put only --httpsPort=8443 or i put --httpsKeyStore=/ path/to/keystore --httpsKeyStorePassword=myPassowrd in my HUDSON_ARGS
ティム

必要なすべてのパラメーター(ポート、ストアの場所、パスワード)を入力します。次に、Jenkinsを起動し、ブラウザでをポイントしますhttp://yourhostname:8443/
ブルーノ

1
@ Umesh.ABhat修正する必要があります。
ブルーノ

21

ApacheではなくNginxを使用している場合に備えproxy_redirect http:// https://;て、Jenkinsからの応答が返ってきたときにLocationヘッダーの書き換えに使用することをお勧めします。

SSLがNginxで終了し、8080を使用して内部的にJenkinsにプロキシされる完全なnginxセットアップは次のようになります。

upstream jenkins {
  server 127.0.0.1:8080 fail_timeout=0;
}

server {
  listen 80 default;
  server_name 127.0.0.1 *.mydomain.com;
  rewrite ^ https://$server_name$request_uri? permanent;
}

server {
  listen 443 default ssl;
  server_name 127.0.0.1 *.mydomain.com;

  ssl_certificate           /etc/ssl/certs/my.crt;
  ssl_certificate_key       /etc/ssl/private/my.key;

  ssl_session_timeout  5m;
  ssl_protocols  SSLv3 TLSv1;
  ssl_ciphers HIGH:!ADH:!MD5;
  ssl_prefer_server_ciphers on;

  # auth_basic            "Restricted";
  # auth_basic_user_file  /home/jenkins/htpasswd;

  location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_redirect http:// https://;

    add_header Pragma "no-cache";

    proxy_pass http://jenkins;
  }
}

14

(いつか?)Jenkinsがキーを生成できることに注意してください。あなたがする必要があるのは、で--httpsPort=(portnum)パラメータを設定することだけですJENKINS_ARGS

私の場合、私はJENKINS_PORT="-1"(httpを無効にして)設定--httpsPort=8080し、自分の目的に合ったものを設定しました。

通常、1000未満のポートにはルートアクセスが必要なので、それより高いポートを選択してください...

(詳細情報へのリンク


3
wiki.jenkins-ci.org/display/JENKINS/…は、このための公式ドキュメントです。
ジェシーグリック

2
そのページに独自のキーの生成に関する言及があればいいのですが-残念ながら、「既存の証明書」を使用するにはデフォルト(独自の自己生成証明書を使用)とは異なる手順が必要であることに注意して、この機能を推測する必要があります
アダムローファー

1
警告:自己生成キーの場合、これは簡単です。ただし、実際の証明書でこれらの手順を使用してみましたが、キーストアのセットアップは非常に苦労しました(キーストアには2つのパスワードがあり、標準ツールはこれについて本当に透明ではないため)。
ブレイザーブレード

1
注:これは、OracleのみJREで、OpenJDKのでは動作しません、それが依存していますsun.security.x509.CertAndKeyGen。また、ごく最近までJava 8で壊れていました(Jenkins 2.38はそれを修正しました)。さらに悪いことに、そのリリースの変更ログにはが記載されていThis option is deprecated and will be removed in a future release. We strongly recommend you create self-signed certificates yourself and use --httpsKeyStoreます。
nh2

9

Ubuntuサーバーの場合(でインストールした場合apt-get install jenkins):

/etc/default/jenkinsファイルの一番下で編集し、Jenkins_argsを編集します。私の引数では、httpアクセスを無効にし(-1を使用)、デフォルトのJenkinsポート(8080)にSSLを設定しました。ここで最も重要な部分は、httpsportと証明書/キーを送信したことです(ある場合は、自己生成された証明書/キーのためにそれらを残すことができます)。crtをApacheに配置し、両方に使用しますが、どこにでも配置できます。

JENKINS_ARGS="--webroot=/var/cache/jenkins/war --httpsPort=$HTTP_PORT --httpPort=-1 --httpsCertificate=/etc/apache2/ssl.crt/CERT.crt --httpsPrivateKey=/etc/apache2/ssl.key/KEY.key --ajp13Port=$AJP_PORT"

場合によっては、Javaキーストアを使用する必要があります。まず、キーを変換します。

openssl pkcs12 -inkey /var/lib/jenkins/jenkins.key.pem -in /var/lib/jenkins/jenkins.crt.pem  -export -out keys.pkcs12

keytool -importkeystore -srckeystore keys.pkcs12 -srcstoretype pkcs12 -destkeystore jenkins.jks

次のようなJenkinsの引数を使用します

JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpsPort=$HTTP_PORT --httpPort=-1 --httpsKeyStore=/etc/apache2/ssl.crt/jenkins.jks --httpsKeyStorePassword=thePassword --ajp13Port=$AJP_PORT"

また、https://serverfault.com/a/569898/300544を参照してください


1
入力するエクスポートパスワードがopenssl、によって要求された「ソースキーストアパスワード」と一致することを確認しますkeytool。さらに、パスワードを空白にすることはできません。
ビショップ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.