Как я могу зашифровать / расшифровать свойства сервера загрузки Spring

У меня есть приложение для весенней загрузки, использующее SSL. В моем файле свойств я определил значение для своего пароля хранилища ключей, идея состоит в том, чтобы не раскрывать пароль в открытом виде, поэтому я зашифровал пароль и смотрю при весенней загрузке, как я могу расшифровать это значение пароля:

server.port=8443
server.ssl.key-alias=selfsigned_certif
server.ssl.key-password=JDHF7E879E7R79E7D9D7Fkdskjdhdkjsdghjsfdghsgfd
server.ssl.key-store=classpath:ssl-server.jks
server.ssl.key-store-provider=SUN
server.ssl.key-store-type=JKS

В моем случае я не могу использовать Ясыпт, потому что мы должны использовать специальную разработанную библиотеку для шифрования и дешифрования пароля.

Есть ли способ реализовать шифрование / дешифрование свойств хранилища ключей с помощью загрузки Spring? заранее спасибо

Думали ли вы о размещении конфиденциальной конфигурации в хранилище?

Roddy of the Frozen Peas 24.09.2018 22:53

В моем случае я не могу использовать Jasypt, потому что мы должны использовать специальную разработанную библиотеку для шифрования и дешифрования пароля.

e2rabi 25.09.2018 00:00
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
2
9 389
2

Ответы 2

Обновлять: Существует аналогичный / лучший ответ на повторяющийся вопрос здесь, как указал Адам в своем комментарии.


Мы сделали нечто подобное, включив инструмент Ясыпт. Это хорошо вписано в экосистему Spring. Обычно вы шифруете значения с помощью ключа шифрования (строки) и помещаете зашифрованное значение в свой файл свойств в окружении ENC(...). Затем вы помещаете ключ шифрования в указанную переменную среды на сервере, на котором выполняется ваш код. Затем вы можете отобразить зашифрованные значения непосредственно в переменные с помощью @Value(...).

Другой вариант - вообще не хранить пароль в исходном коде, а вместо этого защитить пароли на сервере в переменных среды и получить к ним доступ непосредственно во время выполнения. Я думаю, что в любом случае вы в конечном итоге полагаетесь на тот факт, что сервер безопасен, поэтому важно, чтобы вы были уверены, что ваш сервер не будет скомпрометирован.

В моем случае я не могу использовать Jasypt, потому что мы должны использовать специальную разработанную библиотеку для шифрования и дешифрования пароля.

e2rabi 24.09.2018 23:54

Если вы ищете ответ, связанный с весенней загрузкой, я предлагаю взглянуть на проект весеннее облако-конфигурация.

Этот проект позволяет управлять конфигурациями извне (например, в файловой системе или в git) и, среди прочего, поддерживает шифрование значений свойств как с помощью симметричного частного секрета, так и с помощью пары открытый / закрытый ключ.

"Защищенное" свойство в этом случае выглядит так:

db.password = {cipher}AZXCASDAZXC341234ZXCASDFedr453

Где AZXCASDAZXC341234ZXCASDFedr453 на самом деле является зашифрованным значением некоторого пароля. Чтобы зашифровать его, вы должны вызвать метод encrypt один раз, предполагая, что сервер spring-cloud-config работает на порту 8888 вашего компьютера.

 $ curl localhost:8888/encrypt -d mysecretdbpassword >>AZXCASDAZXC341234ZXCASDFedr453

Здесь зашифровывается значение пароля mysecretdbopassword.

Ключ должен быть указан в конфигурациях самого микросервиса spring-cloud-config.

 encrypt.key=ABC123ABC123ABC123

Другой вариант, который есть у этого сервиса, - это интеграция с хранилищем Hashicorp, поэтому он также может быть хорошим кандидатом для хранения секретов.

В моем случае я не могу использовать Jasypt, потому что мы должны использовать специальную разработанную библиотеку для шифрования и дешифрования пароля.

e2rabi 24.09.2018 23:55

В этом случае вы можете просто позаимствовать идею: создать «зашифрованное» значение в автономном режиме и добавить некоторый префикс к свойству, чтобы расшифровка, которая произойдет во время выполнения, знала, какие свойства следует расшифровывать, а какие нет. Вы можете проверить исходный код spring-cloud-config и реализовать его там, либо скатить собственный загрузчик свойств.

Mark Bramnik 25.09.2018 00:01

Я использовал эту библиотеку для шифрования и дешифрования значения в моих файлах свойств, проблема заключалась в весенних загрузочных ключах server.ssl.key-password, например, это значение, которое я не мог получить в коде с помощью @Value

e2rabi 25.09.2018 00:04

Другие вопросы по теме