Включение нативной поддержки TLS/SSL
- Для запуска приложения с нативной поддержкой TLS/SSL протокола шифрования, потребуется утилита keytool поставляемая вместе с openjdk.
- Если при установке JDK/JVM утилита keytool не была установлена, её потребуется установить отдельно.
- Так же необходимо установить утилиту openssl, для работы с сертификатами.
- Для самозаверенных сертификатов, потребуется дополнительно установить корневой сертификат центра сертификации.
1. С помощью утилиты openssl из ваших пары Сертификат/Приватный ключ, необходимо создать специальное хранилище ключей для JVM и поместить в него информацию о сертификате.
- После ввода команды, необходимо будет задать пароль для хранилища ключей. Запомните его, он потребуется далее!
- Для конвертации форматов сертификата отличных от PEM, воспользуйтесь справкой по утилите openssl
openssl pkcs12 -export -name <alias> -in <cert.crt> -inkey <cert.key> -out <keystore.p12>
| Параметр | Значение | |
|---|---|---|
pkcs12 |
Тип хранилища ключей JVM. Рекомендуется использовать pkcs12 |
|
<alias> |
Псевдоним, по которому будет осуществляться поиск в хранилище | |
<cert.crt> |
Путь до файла сертификата в формате PEM | |
<cert.key> |
Путь до файла приватного ключа в формате PEM | |
<keystore.p12> |
Имя хранилища ключей JVM |
2. С помощью утилиты keytool добавьте корневой сертификат центра сертификации в хранилище доверенных ключей JVM.
* Если используется не самозаверенный сертификат, данный пункт можно пропустить. Достаточно установить в систему стандартные ca-сертификаты
keytool -importcert -alias <rootCA> -keystore /usr/lib/jvm/java-11-openjdk-amd64/lib/security/cacerts -storepass changeit -file <rootCA.crt>
| Параметр | Значение |
|---|---|
<rootCA> |
Псевдоним, по которому будет осуществляться поиск в хранилище |
/usr/lib/jvm/java-11-openjdk-amd64/lib/security/cacerts |
Стандартный путь до хранилища доверенных сертификатов в JVM, при установке пакета openjdk-11-jdk. Каталог java-11-openjdk-amd64 может быть другим, в зависимости от типа архитектуры системы |
changeit |
Стандартный пароль для хранилища доверенных сертификатов JVM |
<rootCA.crt> |
Путь до файла сертификата в формате PEM |
3. Откройте файл application.properties приложения GitFlic и внесите конфигурационные параметры в соответствии с вашими данными
* Параметры отмеченные как обязательные, должны присутствовать в файле!
| Параметр | Обязательный | Значение | Описание |
|---|---|---|---|
server.ssl.enabled |
Да | true |
Включение поддержки SSL |
server.ssl.protocol |
Нет | TLS |
Указание что необходимо использовать тип протокола TLS |
server.ssl.key-store |
Да | file:\<path> |
Абсолютный путь до файла хранилища ключей созданного в п.1 |
server.ssl.key-store-type |
Да | pkcs12 |
Указание типа хранилища ключей |
server.ssl.key-store-password |
Да | <secret> |
Пароль от хранилища ключей созданного в п.1 |
server.ssl.key-alias |
Да | <alias> |
Псевдоним пары сертификат/ключ указанный в п.1 |
server.ssl.key-password |
Нет | <secret> |
Пароль от пары сертификат/ключ внутри хранилища ключей JVM созданного в п.1,если таковой был задан. По умолчанию, пароль не установлен |
server.ssl.trust-store |
Нет | file:\<path> |
Абсолютный путь до файла хранилища ключей доверенных сертификатов JVM, если используется нестандартное хранилище |
server.ssl.trust-store-password |
Нет | <secret> |
Пароль от хранилища ключей доверенных сертификатов JVM, если используется нестандартное хранилище |
server.ssl.trust-store-type |
Нет | pkcs12/jks |
Тип хранилища ключей доверенных сертификатов JVM |
* С полным списком всех доступных параметров для конфигурации TLS/SSL, можно ознакомиться на данной странице.
4. Запустите приложение GitFlic. Веб интерфейс будет доступен по адресу https://\<server.address>:\<server.port>
Использование привилегированного порта
По умолчанию порты до 1024 для Java являются привилегированными. Для того, чтобы использовать порт 80 или 443 необходимо выполнить команду для расширения прав Java
Данное действие потенциально опасно, использовать данный способ можно только в крайней необходимости. Рекомендуем использовать обратный прокси для данного взаимодействия:
sudo setcap 'cap_net_bind_service=+ep' $(readlink -f $(which java)).
В данном случае Веб интерфейс будет доступен по адресу https://\<server.address>