Есть ли способ использовать Spring Cloud {cipher} в конфигурации приложения Spring Boot?
У меня есть приложение Spring Boot, которое использует Spring Cloud Config, но я хотел бы зашифровать пароль Spring Cloud Config в файле bootstrap.yml приложений Spring Boot. Есть ли способ сделать это? Ниже приведен пример.
Приложение Spring Boot bootstrap.yml
spring:
cloud:
config:
uri: http://locahost:8888
username: user
password: '{cipher}encryptedpassword'
3 ответа
Пара вещей, которые я обнаружил, связанных с этим.
Если вы используете bootstrap.yml (или application.yml), формат текста шифра должен быть заключен в одинарные кавычки:
security.user.password: '{cipher}56e611ce4a99ffd99908d2c9aa1461d831722812e4370a5b6900b7ea680ae914'
Если вы используете bootstrap.properties (или application.properties), формат текста шифра НЕ должен быть заключен:
security.user.password= {cipher}56e611ce4a99ffd99908d2c9aa1461d831722812e4370a5b6900b7ea680ae914
[Справочные документы][1] показывают yml без кавычек, с которыми я никогда не работал. SnakeYaml всегда сообщал об ошибке:
"expected <block end>, but found Scalar"
В клиенте конфигурации есть поддержка зашифрованных свойств (как описано в руководстве пользователя). Очевидно, что если вы делаете это таким образом, вы должны предоставить ключ для расшифровки свойств во время выполнения, так что на самом деле я не всегда вижу преимущества (я полагаю, файл конфигурации немного похож на хранилище ключей со специальным форматом, так что вы только есть один секрет для защиты вместо многих). Пример (application.yml):
integration:
stores:
test: '{cipher}316f8cdbb776c23e679bf209014788a6eab7522f48f97114328c2c9388e6b3c1'
и ключ (в bootstrap.yml):
encrypt:
key: ${ENCRYPT_KEY:} # deadbeef
Вы можете использовать Spring CLI для шифрования секретов spring encrypt password --key 'SECRET_KEY'