Eu tenho um servidor Fedora executando o Jenkins que instalo via yum. Está tudo bem, posso acessá-lo http://ci.mydomain.com
.
Mas agora, quero acessá-lo https://ci.mydomain.com
para que o login com nome de usuário e senha seja criptografado.
Como posso fazer isso?
O seguinte é o meu /etc/sysconfig/jenkins
arquivo. Iniciar o Jenkins funciona, mas não consigo acessar o Jenkins com o navegador da web com https://ci.mydomain.com
ou 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"
Respostas:
Esta página deve ajudá-lo a configurá-lo atrás do Apache (que seria compatível com HTTPS): https://wiki.eclipse.org/Hudson-ci/Running_Hudson_behind_Apache
Além de ser um proxy reverso "normal", você precisará disso (como mostrado nessa página):
fonte
httpsPort
(e parâmetros relacionados): groups.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/
.Caso esteja usando o Nginx e não o Apache, convém
proxy_redirect http:// https://;
reescrever o cabeçalho Location quando a resposta voltar do Jenkins.Uma configuração completa do nginx em que o SSL é encerrado com o Nginx e proxy internamente para o Jenkins usando o 8080 pode ser assim:
fonte
Note-se que (a partir de algum dia?) Jenkins pode gerar a chave para você, tudo que você precisa fazer é definir o
--httpsPort=(portnum)
parâmetroJENKINS_ARGS
.No meu caso, defino
JENKINS_PORT="-1"
(desativei o http) e defina o--httpsPort=8080
que funcionou bem para meus próprios propósitos.Observe que qualquer porta abaixo de 1000 geralmente requer acesso root, então escolha uma porta maior que essa ...
( Link para mais informações)
fonte
sun.security.x509.CertAndKeyGen
. Além disso, ele foi quebrado com o Java 8 até muito recentemente (Jenkins 2.38 corrigiu isso). Pior ainda, diz o changelog desse lançamentoThis option is deprecated and will be removed in a future release. We strongly recommend you create self-signed certificates yourself and use --httpsKeyStore
.Para um servidor Ubuntu (supondo que você tenha instalado
apt-get install jenkins
):Você deseja editar
/etc/default/jenkins
na parte inferior do arquivo, edite Jenkins_args. Nos meus argumentos, desabilitei o acesso http (usando -1) e coloquei o SSL na porta Jenkins padrão (8080). A parte mais importante aqui é que você enviou um httpsPort e um certificado / chave (se você tiver um, caso contrário, poderá deixá-los fora do que é gerado automaticamente). Coloco as crts no apache e depois as uso para as duas, mas você pode colocá-las em qualquer lugar.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"
Em alguns casos, você precisará usar um Java Key Store. Primeiro, converta suas chaves:
Agora use os argumentos do Jenkins como
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpsPort=$HTTP_PORT --httpPort=-1 --httpsKeyStore=/etc/apache2/ssl.crt/jenkins.jks --httpsKeyStorePassword=thePassword --ajp13Port=$AJP_PORT"
Além disso, consulte https://serverfault.com/a/569898/300544
fonte
openssl
corresponde à "senha do keystore de origem" solicitada porkeytool
. Além disso, a senha não pode ficar em branco.