Есть ли способ использовать 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'

https://cloud.spring.io/spring-cloud-cli/

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