Получаем сертификат и ключ
Для начала необходимо сгенерировать сертификат и ключ для сервера. Это можно сделать с помощью модуля описанного здесь: Автоматическая генерация сертификатов из MS CA на Linux
Так же нам понадобиться сертификат Удостоверяющего центра.
Конвертируем сертификат и ключ в формат PKCS12
Команда ниже конвертирует сертификат сервера, УЦ и ключ в файл jenkins.p12
.
Для этого нам нужно:
- ca.crt - Сертификат УЦ:
- server.key - ключ от SSL сертификата сервера;
- 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/
Замените значения следующи аргументов на свои.
-srcstorepass
– пароль для файлаjenkins.p12,
-deststorepass
– пароль для нового файла в формате JKS,-srcalias
– имя нашего Jenkins сервера,-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