В моем профиле Spring у меня есть следующее свойство:
appname:
token: '{cipher}xxx'
Указанный выше токен расшифровывается во время инициализации приложения с использованием следующего закрытого ключа RSA, который находится в application.yml. Этот закрытый ключ вводится из keyvault в форме, закодированной в Base64.
encrypt:
key: ${RSA-KEY}
Приведенное выше дешифрование завершается со следующим сообщением
2020-04-08T16:03:02.01-0400 [APP/PROC/WEB/0] OUT java.lang.IllegalStateException: Cannot decrypt: key=appname.token
2020-04-08T16:03:02.01-0400 [APP/PROC/WEB/0] OUT at org.springframework.cloud.bootstrap.encrypt.EnvironmentDecryptApplicationInitializer.decrypt(EnvironmentDecryptApplicationInitializer.java:201)
2020-04-08T16:03:02.01-0400 [APP/PROC/WEB/0] OUT at org.springframework.cloud.bootstrap.encrypt.EnvironmentDecryptApplicationInitializer.decrypt(EnvironmentDecryptApplicationInitializer.java:165)
2020-04-08T16:03:02.01-0400 [APP/PROC/WEB/0] OUT at org.springframework.cloud.bootstrap.encrypt.EnvironmentDecryptApplicationInitializer.initialize(EnvironmentDecryptApplicationInitializer.java:95)
В keyvault RSA-KEY устанавливается как Base64- закодированное значение. И вышеприведенное дешифрование завершается неудачно, потому что encrypt.key
принимает значение в кодировке Base64. Если бы этот ключ использовался во время выполнения, я бы использовал java.util.Base64
для декодирования. Поскольку это дешифрование происходит во время инициализации приложения, я хотел бы знать, какие опции доступны для меня для декодирования Base64, прежде чем этот ключ будет использован для дешифрования. Просто интересно, есть ли хук, который позволил бы изменить объект, который читает / хранит значения в application.yml.