В этой статье мы рассмотрим процесс перехода нашего Jira сервера с HTTP на HTTPS, т.е. прикрутим SSL сертификат.
По умолчанию после установки Jira на сервер, он доступен по протоколу HTTP, т.е. данные не шифруются между клиентом и сервером. Это потенциальная опасность, можно перехватить логины и пароли, так как они передаются в открытом виде.
После того как встанет вопрос о переходе сервиса на SSL соединение и сертификаты уже есть в наличие, то действуем следующим образом.
Для удобства именуем сертификаты следующим образом
root.crt — рутовый сертификат
intermediate.crt — промежуточный сертификат
company.crt — сам сертификат, выпущенный к примеру на защиту домена второго уровня с возможностью защиты всех поддоменнов.
company.key — закрытый ключ от сертификата
Перенесем все сертификаты через WinSCP на сервер JIRA в папку /opt/atlassian/jira/jre/bin. Можно в любую другую папку, главное запомнить путь. В той папке куда мы скопировали находятся утилиты для генерации специального файла для перевода сервиса JIRA на протолок HTTPS. И нам не придется вводить полный путь к утилите и к файлам во время процесса.
переходим через putty в директорию куда мы скопировали сертификаты командой
cd /opt/atlassian/jira/jre/bin
объединим файлы root.crt и intermediate.crt в один файл командой
cat intermediate.crt root.crt > cabundle.crt
Нам необходимо отредактировать файл, иначе следующая команда выпадет в ошибку. Все дело в том, что при операции конкатенации содержимое сертификата root.crt следует сразу после intermediate.crt, а должен начинаться со следующей строки. Предыдущую команду можно выполнить и вручную открыв файлы любым текстовым редактором и добавив содержимое в следующей последовательности. Сначала промежуточный сертификат, затем рутовый. Мы это сделаем через редактор vi в консоли putty. Открываем файл командой
vi cabundle.crt
и видим следующую картину
Переводим курсор в конец первого сертификата. Переходим в режим редактирования клавишей A. Переносим начало второго сертификата на следующую строку нажав Enter. Должно быть так.
Выходим из режима редактирования нажатием на клавишу ESC. Сохраняем изменения и выходим из файла командой :wq!.
Теперь экспортируем наш сертификат со всей цепочкой сертификатов в файл формата .p12 командой
openssl pkcs12 -export -chain -inkey company.key -in company.crt -name "JIRA" -CAfile cabundle.crt -out jira.p12
Если с файлами все в порядке, то система попросит вести пароль на файл. Вводим 2 раза. (Я скопировал сертификат с закрытым ключем в другую директорию как видно из скрина ниже. Вам этого делать не нужно).
Теперь переконвертируем наш зашифрованный файл с сертификатами и закрытым ключем в формат JKS, чтобы JAVA могла работать с ним. Команда такая.
./keytool -importkeystore -destkeypass Passwordjira -deststorepass Passwordjira -destkeystore /opt/atlassian/jira/jre/bin/jira.jks -srckeystore jira.p12 -srcstoretype PKCS12 -srcstorepass Passwordjira -alias "JIRA"
По плану команда должна отработать без ошибок. Но, то ли после обновления OC, то ли после обновления JIRA на новую версию, при попытке сгенерировать файл формата JKS может появится такое предупреждение
Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore /opt/atlassian/jira/jre/bin/jira.jks -destkeystore /opt/atlassian/jira/jre/bin/jira.jks -deststoretype pkcs12".
Просто тупо вводим команду и получаем нужного формата файл JKS
./keytool -importkeystore -srckeystore /opt/atlassian/jira/jre/bin/jira.jks -destkeystore /opt/atlassian/jira/jre/bin/jira.jks -deststoretype pkcs12
Enter source keystore password:
Entry for alias jira successfully imported.
Import command completed: 1 entries successfully imported, 0 entries failed or cancelled
Warning:
Migrated "/opt/atlassian/jira/jre/bin/jira.jks" to Non JKS/JCEKS. The JKS keystore is backed up as "/opt/atlassian/jira/jre/bin/jira.jks.old".
Также после создания файла необходимо сменить владельца и права на файл аналогично файлам находящимся в папке, где сгенерировался файл формата JKS, т.е. примерно так как на скриншоте. Все этого можно сделать также через консоль putty или через WinSCP
И в конце проверяем все ли мы сделали правильно вводя команду
./keytool -list -keystore jira.jks
Вводим пароль Passwordjira, нас интересует строка PrivateKeyEntrу, если она присутствует, то все норм. Ниже скрин как все должно быть.
Поехали дальше. Для того, чтобы JIRA работала через HTTPS, необходимо отредактировать еще 2 файла. Переходим в каталог, где лежит конфигурация JIRA Service Desk
cd /opt/atlassian/jira/conf/
И перед изменением создадим копию следующей файла командой
cp server.xml serverBKP.xml
теперь отредактируем файл войдя в него командой
vi server.xml
Нас интересует 2 выделенных блока в файле.
Небольшое примечание: в новых версиях инсталлятора или после обновления JIRA SD, отсутствует блок для настройки работы сервиса через протокол HTTPS. Его необходимо добавлять вручную.
приводим их к следующему виду войдя в режим редактирования нажатием на клавишу A
Выходим из режима редактирования нажав на клавишу ESC и выходим из файла сохраняя изменения командой :wq!
Один важный момент при редактировании файла server.xml. Между параметрами в выделенных блоках не должно быть более одного пробела. Если поставить лишний пробел, то JIRA перестанет работать. Ни перезагрузка сервера, ни перезапуск службы не решит проблему.
откроем теперь файл web.xml
vi web.xml
и добавим в конец файла следующий блок перед закрывающим тегом </web-app>. Этот блок отвечает за перенаправление всех запросов с HTTP на HTTPS
<security-constraint> <web-resource-collection> <web-resource-name>all-except-attachments</web-resource-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.jspa</url-pattern> <url-pattern>/browse/*</url-pattern> <url-pattern>/issues/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
должно получиться так
Теперь для вступления изменений в силу передернем службу JIRA командами
/etc/init.d/jira stop /etc/init.d/jira start
дожидаемся загрузки и смотрим, что получилось. При переходе на адрес http://jira.companyname.com:8080 нас автоматом перекидывает на https://jira.companyname.com:8443
После входа останется только подтвердить новый URL-адрес нажав на Update JIRA’s base URL
На этом все.