Jenkins SSL / https ile nasıl kullanılır?


39

Yum ile kurduğum Jenkins çalıştıran bir Fedora sunucum var. Her şey yolunda, ona erişebilirim http://ci.mydomain.com.

Ama şimdi, ona erişmek istiyorum, https://ci.mydomain.comböylece kullanıcı adı ve şifreyle giriş yapın şifrelenmiş.

Bunu nasıl yapabilirim?

Aşağıdaki benim /etc/sysconfig/jenkinsdosyam. Jenkins işe başlamakla birlikte, ancak web tarayıcısıyla Jenkins'e https://ci.mydomain.comveya http://ci.mydomain.com:443ile ...

## 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"

1000'in altındaki herhangi bir bağlantı noktasını kullanmak için authbind komutunu kullanabilir ve hala jenkins'i root olmayan olarak çalıştırabilirsiniz.

Yanıtlar:


17

Bu sayfa Apache'nin arkasına kurmanıza yardımcı olacaktır (HTTPS kodunu kullanır): https://wiki.eclipse.org/Hudson-ci/Running_Hudson_behind_Apache

"Normal" bir ters proxy olması dışında, buna ihtiyacınız olacak (o sayfada gösterildiği gibi):

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

2
Cevap için teşekkürler. Apache kurulmuyor ve çalışıyor, sadece Jenkins ile Linux sunucum var.
Tim

3
Bu durumda, sertifikanızla bir anahtar deposu oluşturun ve kullanın httpsPort(ve ilgili parametreler): groups.google.com/group/jenkinsci-users/browse_thread/thread/…
Bruno

Tamam, anahtar deposuna kendi sertifikam eklenmiş. Ama şimdi ne aramalıyım? Bunu nerede yapmalıyım? In any case: if I put only --httpsPort=8443 or i put --httpsKeyStore=/ path/to/keystore --httpsKeyStorePassword=myPassowrd in my HUDSON_ARGS?
Tim

Gerekli tüm parametreleri (port, depo yeri ve şifre) giriniz. Ardından, Jenkins'i başlatın ve tarayıcınızı işaret edin http://yourhostname:8443/.
Bruno

1
@ Umesh.ABhat Şimdi düzeltilmesi gerekiyor.
Bruno,

21

Sadece Nginx kullanıyorsanız ve Apache kullanmıyorsanız proxy_redirect http:// https://;, cevap Jenkins'den geldiğinde Konum başlığını yeniden yazmak isteyebilirsiniz .

SSL'nin Nginx ile sonlandırıldığı ve 8080'i kullanarak dahili olarak Jenkins'e yakınlaştırıldığı eksiksiz bir nginx kurulumu şöyle görünebilir:

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

Unutmayın ki (bazen?) Jenkins sizin için anahtarı üretebilir, yapmanız gereken tek şey --httpsPort=(portnum)parametreyi ayarlamaktır JENKINS_ARGS.

Benim durumumda JENKINS_PORT="-1"(http'yi devre dışı bırak) ve --httpsPort=8080kendi amaçlarım için işe yarayan kümeyi ayarladım .

Sadece 1000'in altındaki herhangi bir bağlantı noktasının genel olarak kök erişimi gerektirdiğine dikkat edin, bu yüzden ...

( Daha fazla bilgi için link )



2
Bu sayfanın kendi anahtarını oluşturmaktan bahsetmesi güzel olurdu - ne yazık ki bir "varolan sertifika" kullandığını varsayılandan farklı adımlar gerektirdiğini fark ederek bu yeteneği çıkarmanız gerekir (kendi kendini oluşturmuş olanı kullanır)
Adam Rofer

1
Uyarı: bu, kendi kendine üretilen anahtarlar için yeterince kolaydır; Ancak, bu talimatları gerçek bir sertifika ile kullanmayı denedim ve anahtar deposunu ayarlamak çok büyük bir acıydı (çünkü anahtarcıların iki şifresi var ve standart araçlar bu konuda gerçekten şeffaf değillerdi).
Blaisorblade

1
Not: Bu OpenJDK ile çalışmaz, çünkü yalnızca Oracle JRE ile çalışırsun.security.x509.CertAndKeyGen . Ayrıca, Java 8 ile son zamanlara kadar kırıldı (Jenkins 2.38 bunu düzeltti). Daha da kötüsü, bu sürüm için changelog diyor 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

Bir Ubuntu sunucusu için (kurulu olduğunu varsayarak apt-get install jenkins):

Düzenlemeyle isteyeceksiniz /etc/default/jenkinsdosya, düzenleme Jenkins_args altındaki. Argularımda http erişimini devre dışı bıraktım (-1 kullanarak) ve SSL'yi varsayılan Jenkins portuna (8080) koydum. Buradaki en önemli kısım, bir httpsPort ve sertifika / anahtar göndermiş olmanızdır (eğer varsa, aksi takdirde kendi kendine oluşturulanlar için bunları bırakabilirsiniz). Ben krizi apache'ye koyuyorum ve sonra ikisini de kullanıyorum, ama onları herhangi bir yere koyabilirsin.

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"

Bazı durumlarda, bir Java Anahtar Deposu kullanmanız gerekebilir. İlk olarak, anahtarlarınızı dönüştürün:

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

Şimdi Jenkins args gibi kullan

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

Ayrıca bkz. Https://serverfault.com/a/569898/300544


1
Sağladığınız ihracat şifresinin openssl, istenen "kaynak anahtar deposu şifresi" ile eşleştiğinden emin olun keytool. Ayrıca, şifre boş olamaz.
bishop 15
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.