SSL / https와 함께 Jenkins를 사용하는 방법


39

yukins를 통해 설치하는 Jenkins를 실행하는 Fedora 서버가 있습니다. 다 괜찮습니다 http://ci.mydomain.com.로 액세스 할 수 있습니다 .

그러나 이제는 https://ci.mydomain.com사용자 이름과 비밀번호로 로그인하도록 암호화 하여 액세스하고 싶습니다 .

어떻게해야합니까?

다음은 내 /etc/sysconfig/jenkins파일입니다. Jenkins를 시작하면 작동하지만 https://ci.mydomain.com또는 웹 브라우저로 Jenkins에 액세스 할 수 없습니다 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 미만의 모든 포트를 사용하고 여전히 루트가 아닌 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 서버 만 있습니다.
Tim

3
이 경우 인증서를 사용하여 키 저장소를 생성 httpsPort하고 관련 매개 변수를 사용하십시오 . groups.google.com/group/jenkinsci-users/browse_thread/thread/…
Bruno

좋아, 내 인증서가 키 저장소에 추가되었습니다. 하지만 지금 무엇을 불러야합니까? 어디서해야합니까? In any case: if I put only --httpsPort=8443 or i put --httpsKeyStore=/ path/to/keystore --httpsKeyStorePassword=myPassowrd in my HUDSON_ARGS?
Tim

필요한 모든 매개 변수 (포트, 상점 위치 및 비밀번호)를 입력하십시오. 그런 다음 Jenkins를 시작하고 브라우저를로 가리 킵니다 http://yourhostname:8443/.
Bruno

1
@ Umesh.ABhat 지금 수정해야합니다.
Bruno

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

젠킨스는 당신을 위해 키를 생성 할 수 --httpsPort=(portnum)있다 JENKINS_ARGS.

내 경우에는 JENKINS_PORT="-1"http를 비활성화 --httpsPort=8080하고 내 목적에 잘 맞는 것을 설정 했습니다.

1000 미만의 포트는 일반적으로 루트 액세스가 필요하므로 그보다 높은 포트를 선택하십시오.

( 자세한 정보는 링크 )


3
wiki.jenkins-ci.org/display/JENKINS/… 는 이에 대한 공식 문서입니다.
Jesse Glick

2
불행하게도 당신이 "기존 인증서를"usang 것은 (자신의 자체 생성을 사용하는) 기본 다른 단계를 필요로 몰래하여이 기능을 추론해야 - 해당 페이지가 자신의 키를 생성하는 방법에 대한 어떤 언급이 있다면 그것은 좋은 것
Adam Rofer

1
경고 : 자체 생성 키에는 충분합니다. 그러나 실제 인증서와 함께 이러한 지침을 사용하려고 시도했으며 키 저장소를 설정하는 것은 큰 고통이었습니다 (키 저장소에는 두 개의 암호가 있고 표준 도구는 실제로 투명하지 않기 때문에).
Blaisorblade

1
참고 : 때문 만은 Oracle JRE와 함께, 오픈 JDK 작동하지 않습니다 가에 의존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의 맨 아래에. 내 인수에서, -1을 사용하여 http 액세스를 비활성화하고 기본 Jenkins 포트 (8080)에 SSL을 배치했습니다. 여기서 가장 중요한 부분은 httpsPort와 인증서 / 키를 보냈다는 것입니다. 나는 crts를 아파치에 넣고 두 가지 모두에 사용하지만 어디든지 넣을 수 있습니다.

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 Key Store를 사용해야 할 수도 있습니다. 먼저 키를 변환하십시오.

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를 사용하십시오.

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.