Я создал config-сервер на основе этого примера github: https://github.com/spring-cloud-samples/configserver
Я изменил его, чтобы он указывал на мой локальный git-репозиторий, а также установил полнофункциональный JCE, установленный в моей среде.
Функции шифрования и дешифрования работали, как и ожидалось, с использованием асимметричного ключа с файлом JKS хранилища ключей: создавали зашифрованное значение с использованием конечной точки /encrypt
; включил его в мой репозиторий git (свойство test
); получить ключ, расшифрованный с конечной точки /{app}-{env}.yml
.
В конфигурационных документах Spring Cloud говорится, что асимметричный ключ можно установить как текстовое значение в кодировке PEM в encrypt.key
:
http://cloud.spring.io/spring-cloud-config/1.4.x/single/spring-cloud-config.html#_key_management
Я преобразовал файл keystore.jks в файл PEM со следующим:
keytool -importkeystore -srckeystore keystore.jks -destkeystore key.p12 -srcalias test -srcstoretype jks -deststoretype pkcs12
openssl pkcs12 -in key.p12 -out key.pem
Я изменил файл bootstrap.yml
и включил содержимое файла key.pem
:
encrypt:
failOnError: false
key: |
Bag Attributes
friendlyName: test
localKeyID: 54 69 6D 65 20 31 35 33 37 32 31 39 34 35 38 32 30 31
Key Attributes: <No Attributes>
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIFxcOg3aNibsCAggA
(...)
0m6f+FvV3glvSE4C86VeNwKUdiEMKtzf5A/Ie9B0jhjIP/R0n4tSuQNNNRfetJxB
3mk=
-----END ENCRYPTED PRIVATE KEY-----
Bag Attributes
friendlyName: test
localKeyID: 54 69 6D 65 20 31 35 33 37 32 31 39 34 35 38 32 30 31
subject=/C=Unknown/ST=Unknown/L=Unknown/O=Unknown/OU=Unknown/CN=Unknown
issuer=/C=Unknown/ST=Unknown/L=Unknown/O=Unknown/OU=Unknown/CN=Unknown
-----BEGIN CERTIFICATE-----
MIIDdzCC
(...)
aMgI8QW+kQ
-----END CERTIFICATE-----
А теперь не удается расшифровать свойство test
с ошибкой:
Cannot decrypt key: sftp.privateKeyPassphrase (class java.lang.IllegalArgumentException: Non-hex character in input: ..)
- Это должно работать так, как я ожидал, или мне нужно восстановить зашифрованное значение?
- Если последнее верно, мой ключ вместо этого используется как симметричный ключ?
- Я хотел бы избежать использования файлов конфигурации и иметь все установленные с переменными среды. Есть ли другая возможность?