SSL / https के साथ जेनकिंस का उपयोग कैसे करें


39

मेरे पास एक फेडोरा सर्वर है जो जेनकिंस चला रहा है जिसे मैं यम के माध्यम से स्थापित करता हूं। सब कुछ ठीक है, मैं इसे एक्सेस कर सकता हूं 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"

आप 1000 से नीचे के किसी भी पोर्ट का उपयोग करने के लिए ऑर्टबाइंड का उपयोग कर सकते हैं और फिर भी नॉन-रूट के रूप में जेनकिंस चला सकते हैं।

जवाबों:


17

इस पृष्ठ को अपाचे के पीछे स्थापित करने में आपकी सहायता करनी चाहिए (जो 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
उत्तर के लिए धन्यवाद। मेरे पास अपाचे और रनिंग नहीं है, मेरे पास केवल जेनकिंस के साथ लिनक्स सर्वर है।
टिम

3
इस स्थिति में, अपने प्रमाणपत्र और उपयोग httpsPort(और संबंधित मापदंडों) के साथ एक कीस्टॉर बनाएं : group.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
@ उमेश.जब अभी तय होना चाहिए।
ब्रूनो

21

जैसे ही आप Nginx का उपयोग कर रहे हैं और अपाचे का नहीं, आप proxy_redirect http:// https://;स्थान हेडर को फिर से लिखने के लिए उपयोग करना चाह सकते हैं क्योंकि प्रतिक्रिया जेनकींस से वापस आती है।

एक पूर्ण नगीनक्स सेटअप, जहां एसएसएल को नगीनेक्स के साथ समाप्त किया गया है और 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
चेतावनी: यह स्व-निर्मित कुंजी के लिए काफी आसान है; हालाँकि, मैंने वास्तविक निर्देशों के साथ उन निर्देशों का उपयोग करने की कोशिश की, और कीस्टोर को स्थापित करने में बहुत दर्द हुआ (क्योंकि कीस्टोर्स के पास दो पासवर्ड हैं और मानक उपकरण वास्तव में इस बारे में पारदर्शी नहीं हैं)।
ब्लेसरॉब्लेड

1
नोट: यह OpenJDK के साथ काम नहीं करता है, केवल Oracle JRE के साथ है, क्योंकि यह निर्भर करता हैsun.security.x509.CertAndKeyGen । इसके अलावा, यह जावा 8 के साथ हाल ही में टूट गया था (जेनकिंस 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 संपादित करें। मेरे args में, मैंने http एक्सेस (-1 का उपयोग करके) को निष्क्रिय कर दिया है और SSL को डिफ़ॉल्ट जेनकींस पोर्ट (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"

कुछ मामलों में, आपको जावा कुंजी स्टोर का उपयोग करना होगा। सबसे पहले, अपनी कुंजियाँ बदलें:

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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.