Як користуватися Jenkins із SSL / https


39

У мене є сервер Fedora під управлінням Jenkins, який я встановлюю через yum. Все гаразд, я можу отримати доступ до нього http://ci.mydomain.com.

Але тепер я хочу отримати доступ до нього, https://ci.mydomain.comщоб логін із ім'ям користувача та паролем шифрувався.

Як я можу це зробити?

Далі - мій /etc/sysconfig/jenkinsфайл. Початок роботи Дженкінса, але я не можу отримати доступ до Дженкінса з веб-браузером за допомогою, https://ci.mydomain.comабо http://ci.mydomain.com:443...

## 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 і все одно запускати джинкіни як некоріозні.

Відповіді:


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 не працює і працює, у мене тільки сервер 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?
Тім

Поставте всі необхідні параметри (порт, місце зберігання та пароль). Потім запустіть Дженкінс і вкажіть веб-переглядач http://yourhostname:8443/.
Бруно

1
@ Umesh.AB Що це слід виправити зараз.
Бруно

21

На випадок, якщо ви використовуєте Nginx, а не Apache, ви можете скористатися proxy_redirect http:// https://;для перезапису заголовка Location, оскільки відповідь повернеться від Дженкінса.

Повна настройка nginx, коли SSL припиняється з Nginx і передається внутрішньо до Дженкінса за допомогою 8080, може виглядати так:

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

Зауважте, що (колись?) Дженкінс може створити для вас ключ, все, що вам потрібно зробити, це встановити --httpsPort=(portnum)параметр в JENKINS_ARGS.

У моєму випадку я встановив JENKINS_PORT="-1"(відключити http) і встановив, --httpsPort=8080що добре працювало в моїх цілях.

Просто зауважте, що будь-який порт нижче 1000 зазвичай вимагає кореневого доступу, тому виберіть порт вище, ніж цей ...

( Посилання для отримання додаткової інформації)


3
wiki.jenkins-ci.org/display/JENKINS/… - це офіційна документація для цього, до речі.
Джессі Глік

2
Було б добре, якби на цій сторінці були якісь згадки про створення власного ключа - на жаль, ви повинні зробити висновок про цю можливість, помітивши, що для встановлення "існуючого сертифіката" потрібні інші кроки, ніж за замовчуванням (для якого використовується власний самогенерований)
Адам Рофер

1
Попередження: це досить просто для самостійно згенерованих ключів; однак я спробував використати ці інструкції з реальним сертифікатом, і налаштування магазину ключів викликало величезний біль (оскільки в магазинах клавіш є два паролі, а стандартні інструменти щодо цього не прозорі).
Blaisorblade

1
Примітка. Це не працює з OpenJDK, лише з Oracle JRE, оскільки він покладається на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) і поставив SSL на порт Jenkins за замовчуванням (8080). Найважливіша частина тут полягає в тому, що ви надіслали httpsPort та сертифікат / ключ (якщо у вас є такий, інакше ви можете залишити їх для самостійно створеного). Я поміщаю крихітки в апаш і потім використовую їх для обох, але ви можете їх помістити де завгодно.

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_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. Крім того, пароль не може бути порожнім.
єпископ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.