Получаем сертификат и ключ

Для начала необходимо сгенерировать сертификат и ключ для сервера. Это можно сделать с помощью модуля описанного здесь: Автоматическая генерация сертификатов из MS CA на Linux

Так же нам понадобиться сертификат Удостоверяющего центра.

Конвертируем сертификат и ключ в формат PKCS12

Команда ниже конвертирует сертификат сервера, УЦ и ключ в файл jenkins.p12.

Для этого нам нужно:

  1. ca.crt - Сертификат УЦ:
  2. server.key - ключ от SSL сертификата сервера;
  3. server.crt - SSL сертификат сервера;
1openssl pkcs12 -export -out jenkins.p12 \
2-passout 'pass:<PASSWORD>' -inkey server.key \
3-in server.crt -certfile ca.crt -name jenkins.0xbbeer.ru

где:

  • <PASSWORD> - пароль для файла jenkins.p12
  • jenkins.0xbbeer.ru - имя нашего Jenkins сервера

Конвертируем PKCS12 в формат JKS

О JKS: https://javadev.ru/https/ssl-keystore-java/

Замените значения следующи аргументов на свои.

  1. -srcstorepass – пароль для файла jenkins.p12,
  2. -deststorepass – пароль для нового файла в формате JKS,
  3. -srcalias – имя нашего Jenkins сервера,
  4. -destalias – имя нашего Jenkins сервера,.
keytool -importkeystore -srckeystore jenkins.p12 \
-srcstorepass '<PASSWORD>' -srcstoretype PKCS12 \
-srcalias jenkins.0xbbeer.ru -deststoretype JKS \
-destkeystore jenkins.jks -deststorepass '<PASSWORD>' \
-destalias jenkins.0xbbeer.ru

При успешном выполнении в текущей папке появится файл jenkins.jks .

Создадим папку в /etc/ и переместим в нее полученный файл jenkins.jks .

mkdir -p /etc/jenkins
cp jenkins.jks /etc/jenkins/

Изменим права на папку и файл:

chown -R jenkins: /etc/jenkins
chmod 700 /etc/jenkins
chmod 600 /etc/jenkins/jenkins.jks

Изменим Unit-файл Jenkins для работы с SSL

Откроем Unit File для изменений

sudo systemctl edit jenkins.service

И добавим следующие строки:

1[Service]
2Environment="JENKINS_PORT="-1"
3Environment="JENKINS_HTTPS_PORT=8443"
4Environment="JENKINS_HTTPS_KEYSTORE=/etc/jenkins/jenkins.jks"
5Environment="JENKINS_HTTPS_KEYSTORE_PASSWORD=<PASSWORD>"
6Environment="JENKINS_HTTPS_LISTEN_ADDRESS=0.0.0.0"

где:

  • JENKINS_HTTPS_KEYSTORE - путь для файла jenkins.jks
  • JENKINS_HTTPS_KEYSTORE_PASSWORD - пароль от файла jenkins.jks

Если мы хотим что бы Jenkins был доступен на порту 443, изменим параметр JENKINS\_HTTPS\_PORT и добавим параметр AmbientCapabilities=CAP\_NET\_BIND\_SERVICE:

1Environment="JENKINS_HTTPS_PORT=443"
2AmbientCapabilities=CAP_NET_BIND_SERVICE

Сохраняем изменения в Unit-файле и применяем их:

sudo systemctl daemon-reload

Перезапускаем Jenkins и проверяем его статус:

1sudo systemctl restart jenkins
2sudo systemctl status jenkins

Проверяем работу:

Заходим в веб-интерфейс на указанный нами в Unit-файле порт (443 или 8443):

https://<jenkins-dns/ip>:8443