У меня есть приложение для весенней загрузки, использующее 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? заранее спасибо
В моем случае я не могу использовать Jasypt, потому что мы должны использовать специальную разработанную библиотеку для шифрования и дешифрования пароля.




Обновлять: Существует аналогичный / лучший ответ на повторяющийся вопрос здесь, как указал Адам в своем комментарии.
Мы сделали нечто подобное, включив инструмент Ясыпт. Это хорошо вписано в экосистему Spring. Обычно вы шифруете значения с помощью ключа шифрования (строки) и помещаете зашифрованное значение в свой файл свойств в окружении ENC(...). Затем вы помещаете ключ шифрования в указанную переменную среды на сервере, на котором выполняется ваш код. Затем вы можете отобразить зашифрованные значения непосредственно в переменные с помощью @Value(...).
Другой вариант - вообще не хранить пароль в исходном коде, а вместо этого защитить пароли на сервере в переменных среды и получить к ним доступ непосредственно во время выполнения. Я думаю, что в любом случае вы в конечном итоге полагаетесь на тот факт, что сервер безопасен, поэтому важно, чтобы вы были уверены, что ваш сервер не будет скомпрометирован.
В моем случае я не могу использовать Jasypt, потому что мы должны использовать специальную разработанную библиотеку для шифрования и дешифрования пароля.
Если вы ищете ответ, связанный с весенней загрузкой, я предлагаю взглянуть на проект весеннее облако-конфигурация.
Этот проект позволяет управлять конфигурациями извне (например, в файловой системе или в 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, потому что мы должны использовать специальную разработанную библиотеку для шифрования и дешифрования пароля.
В этом случае вы можете просто позаимствовать идею: создать «зашифрованное» значение в автономном режиме и добавить некоторый префикс к свойству, чтобы расшифровка, которая произойдет во время выполнения, знала, какие свойства следует расшифровывать, а какие нет. Вы можете проверить исходный код spring-cloud-config и реализовать его там, либо скатить собственный загрузчик свойств.
Я использовал эту библиотеку для шифрования и дешифрования значения в моих файлах свойств, проблема заключалась в весенних загрузочных ключах server.ssl.key-password, например, это значение, которое я не мог получить в коде с помощью @Value
Думали ли вы о размещении конфиденциальной конфигурации в хранилище?