41 votes

Comment utiliser Jenkins avec SSL / https

J'ai un serveur Fedora exécutant Jenkins que j'installe via yum. Tout fonctionne bien, je peux y accéder avec http://ci.mydomain.com.

Mais maintenant, je veux y accéder avec https://ci.mydomain.com de sorte que la connexion avec nom d'utilisateur et mot de passe soit chiffrée.

Comment puis-je faire cela ?

Voici mon fichier /etc/sysconfig/jenkins. Le démarrage de Jenkins fonctionne, mais je ne peux pas accéder à Jenkins avec le navigateur Web avec https://ci.mydomain.com ou http://ci.mydomain.com:443, ...

## Path:        Développement/Jenkins
## Description : Configuration pour le serveur de build continu Jenkins
## Type:        string
## Default:     "/var/lib/jenkins"
## ServiceRestart: jenkins
#
# Répertoire où Jenkins stocke sa configuration et ses fichiers de travail
# (checkouts, rapports de build, artefacts, ...).
#
JENKINS_HOME="/var/lib/jenkins"

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Exécutable Java pour exécuter Jenkins
# Laissez vide, nous essayerons de trouver le Java approprié.
#
JENKINS_JAVA_CMD=""

## Type:        string
## Default:     "jenkins"
## ServiceRestart: jenkins
#
# Compte utilisateur Unix qui exécute le démon Jenkins
# Faites attention lorsque vous modifiez cela, car vous devez mettre à jour
# les autorisations de $JENKINS_HOME et /var/log/jenkins.
#
JENKINS_USER="jenkins"

## Type:        string
## Default:     "-Djava.awt.headless=true"
## ServiceRestart: jenkins
#
# Options à passer à Java lors de l'exécution de Jenkins.
#
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"

## Type:        integer(0:65535)
## Default:     8080
## ServiceRestart: jenkins
#
# Port sur lequel Jenkins écoute.
#
JENKINS_PORT="8080"

## Type:        integer(1:9)
## Default:     5
## ServiceRestart: jenkins
#
# Niveau de débogage des journaux -- plus la valeur est élevée, plus elle est verbeuse.
# 5 est INFO.
#
JENKINS_DEBUG_LEVEL="5"

## Type:        yesno
## Default:     no
## ServiceRestart: jenkins
#
# Activer ou non l'enregistrement d'accès.
#
JENKINS_ENABLE_ACCESS_LOG="no"

## Type:        integer
## Default:     100
## ServiceRestart: jenkins
#
# Nombre maximal de threads de travail HTTP.
#
JENKINS_HANDLER_MAX="100"

## Type:        integer
## Default:     20
## ServiceRestart: jenkins
#
# Nombre maximal de threads de travail HTTP inactifs.
#
JENKINS_HANDLER_IDLE="20"

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Passez des arguments arbitraires à Jenkins.
# Liste complète des options : java -jar jenkins.war --help
#
JENKINS_ARGS="--httpsPort=443 --httpsKeyStore=/root/.keystore --httpsKeyStorePassword=MYPASSWORD"

21voto

emm Points 211

Si vous utilisez Nginx au lieu d'Apache, vous voudrez peut-être utiliser proxy_redirect http:// https://; pour réécrire l'en-tête Location lorsque la réponse provient de Jenkins.

Une configuration complète de Nginx où SSL est terminé avec Nginx et proxy interne vers Jenkins en utilisant le port 8080 pourrait ressembler à ceci :

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

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

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

  ssl_certificate           /etc/ssl/certs/mon.crt;
  ssl_certificate_key       /etc/ssl/private/maClef.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;
  }
}

17voto

Bruno Points 4069

Cette page devrait vous aider à le configurer derrière Apache (qui gérerait le HTTPS) : https://wiki.eclipse.org/Hudson-ci/Running_Hudson_behind_Apache

En plus d'être un reverse-proxy "normal", vous aurez besoin de ceci (comme indiqué sur cette page) :

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

15voto

irfan Points 11

Remarquez que (à partir d'un certain moment?) Jenkins peut générer la clé pour vous, tout ce que vous avez à faire est de définir le paramètre --httpsPort=(portnum) dans JENKINS_ARGS.

Dans mon cas, j'ai défini JENKINS_PORT="-1" (désactiver http) et j'ai défini --httpsPort=8080 ce qui a bien fonctionné pour mes propres besoins.

Mais notez que tout port inférieur à 1000 nécessite généralement un accès root, donc choisissez un port supérieur à cela...

(Lien pour plus d'informations)

10voto

Loren Points 233

Pour un serveur Ubuntu (en supposant que vous avez installé avec apt-get install jenkins):

Vous voulez modifier /etc/default/jenkins au bas du fichier, modifier Jenkins_args. Dans mes arguments, j'ai désactivé l'accès http (en utilisant -1) et mis en place SSL sur le port Jenkins par défaut (8080). La partie la plus importante ici est que vous avez défini un httpsPort et un certificat/clé (si vous en avez un, sinon vous pouvez les laisser de côté pour celui généré automatiquement). J'ai placé les crts dans apache et les utilise pour les deux, mais vous pourriez les mettre n'importe où.

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"

Dans certains cas, vous devrez utiliser un dépôt de clés Java. Tout d'abord, convertissez vos clés :

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

Utilisez maintenant les arguments de Jenkins comme suit

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

Voir aussi https://serverfault.com/a/569898/300544

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X