Frage Wie benutzt man Jenkins mit SSL / https?


Ich habe einen Fedora-Server, auf dem Jenkins läuft, den ich über yum installiere. Alles ist in Ordnung, ich kann darauf zugreifen http://ci.mydomain.com.

Aber jetzt möchte ich mit zugreifen https://ci.mydomain.com Die Anmeldung mit Benutzername und Passwort ist verschlüsselt.

Wie kann ich das machen?

Das Folgende ist mein /etc/sysconfig/jenkins Datei. Der Start von Jenkins funktioniert, aber ich kann mit dem Webbrowser nicht auf Jenkins zugreifen https://ci.mydomain.com oder 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"

37
2018-06-07 12:20


Ursprung


Sie können authbind verwenden, um einen Port unter 1000 zu verwenden, und jenkins weiterhin als nicht root ausführen.


Antworten:


Diese Seite sollte Ihnen helfen, es hinter Apache (welches HTTPS behandelt) einzurichten: https://wiki.eclipse.org/Hudson-ci/Running_Hudson_behind_Apache

Abgesehen davon, dass Sie ein "normaler" Reverse-Proxy sind, benötigen Sie diese (wie auf dieser Seite gezeigt):

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

15
2018-06-07 13:01



Danke für die Antwort. Ich habe Apache nicht in Betrieb, ich habe nur den Linux-Server mit Jenkins. - Tim
In diesem Fall erstellen Sie einen Keystore mit Ihrem Zertifikat und verwenden Sie httpsPort (und verwandte Parameter): groups.google.com/group/jenkinsci-users/browse_thread/thread/... - Bruno
Okay, ich habe mein eigenes Zertifikat im Keystore hinzugefügt. Aber wie soll ich jetzt anrufen? Wo soll ich das machen? In any case: if I put only --httpsPort=8443 or i put --httpsKeyStore=/ path/to/keystore --httpsKeyStorePassword=myPassowrd in my HUDSON_ARGS? - Tim
Legen Sie alle erforderlichen Parameter (Port, Speicherort und Passwort) fest. Dann starte Jenkins und richte deinen Browser auf http://yourhostname:8443/. - Bruno
@ Umesh.ABhat Es sollte jetzt behoben werden. - Bruno


Nur für den Fall, dass Sie Nginx und nicht Apache verwenden, möchten Sie vielleicht verwenden proxy_redirect http:// https://; um den Location-Header neu zu schreiben, da die Antwort von Jenkins kommt.

Ein komplettes nginx-Setup, bei dem SSL mit Nginx beendet wird und intern mit Jenkins 8080 Proxy-Proxy ist, könnte folgendermaßen aussehen:

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;
  }
}

21
2018-03-27 13:18





Beachten Sie, dass Jenkins (ab wann?) Den Schlüssel für Sie generieren kann --httpsPort=(portnum) Parameter in JENKINS_ARGS.

In meinem Fall habe ich gesetzt JENKINS_PORT="-1" (http deaktivieren) und einstellen --httpsPort=8080 was für meine eigenen Zwecke gut funktioniert hat.

Beachten Sie, dass jeder Port unter 1000 in der Regel Root-Zugriff erfordert. Wählen Sie also einen höheren Port als ...

(Verknüpfung Für mehr Information)


14
2017-09-28 20:09



wiki.jenkins-ci.org/display/JENKINS/ ... ist übrigens die offizielle Dokumentation dafür. - Jesse Glick
Es wäre schön, wenn diese Seite eine Erwähnung über das Erzeugen eines eigenen Schlüssels hätte - leider muss man diese Fähigkeit ableiten, indem man merkt, dass ein "existierendes Zertifikat" andere Schritte benötigt als der Standard (der sein eigenes selbst erzeugtes verwendet). - Adam Rofer
Warnung: Das ist einfach genug für selbst erstellte Schlüssel; Allerdings habe ich versucht, diese Anweisungen mit einem echten Zertifikat zu verwenden, und das Einrichten des Keystores war ein großer Fehler (da Keystores zwei Passwörter haben und die Standardwerkzeuge wirklich nicht transparent sind). - Blaisorblade
Hinweis: Dies funktioniert nicht mit OpenJDK, nur mit der Oracle JRE, weil es beruht auf sun.security.x509.CertAndKeyGen. Es war auch gebrochen mit Java 8 bis vor kurzem (Jenkins 2.38 hat das behoben). Schlimmer noch, das Changelog für diese Version sagt 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


Für einen Ubuntu-Server (vorausgesetzt, Sie haben mit installiert apt-get install jenkins):

Sie werden es bearbeiten wollen /etc/default/jenkins Bearbeiten Sie Jenkins_args am Ende der Datei. In meinen Argumenten habe ich den HTTP-Zugriff deaktiviert (mit -1) und SSL auf den Jenkins-Standardport (8080) gesetzt. Der wichtigste Teil hier ist, dass Sie einen httpsPort und Zertifikat / Schlüssel gesendet haben (wenn Sie einen haben, sonst können Sie diese für den selbst erzeugten abstellen). Ich platziere die Karten in Apache und benutze sie dann für beide, aber du könntest sie überall hinstellen.

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"

In einigen Fällen müssen Sie einen Java-Schlüsselspeicher verwenden. Konvertieren Sie zuerst Ihre Schlüssel:

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

Jetzt benutze Jenkins Argumente wie

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

Siehe auch https://serverfault.com/a/569898/300544


9
2018-05-09 19:14



Stellen Sie sicher, dass das Exportkennwort an Sie übermittelt wird openssl entspricht dem "Quellschlüsselspeicherkennwort", das von angefordert wird keytool. Außerdem darf das Passwort nicht leer sein. - bishop