Spring Cloud Config 서버에서 암호화된 데이터를 복호화하려는 과정에서 아래와 같은 오류가 발생했습니다:
java.lang.IllegalStateException: Cannot decrypt: key=jwt.secret
...
Caused by: java.lang.UnsupportedOperationException: No decryption for FailsafeTextEncryptor. Did you configure the keystore correctly?
Config 서버 설정에서 복호화 기능이 비활성화된 상태(spring.cloud.config.server.encrypt.enabled=false
)였기 때문에, 클라이언트가 복호화를 시도할 때 키를 찾을 수 없었습니다.
Config 서버에 공개키만 두고 암호화만 수행하며, 클라이언트에서 개인키를 사용해 복호화하도록 변경했습니다. 아래는 구현 과정입니다.
Config 서버에서 사용할 인증서를 생성합니다:
keytool -export -alias apiEncryptionKey -keystore apiEncryptionKey.jks -rfc -file trust_key.cer
Config 서버에서 사용할 공개키만 포함된 키스토어를 생성합니다:
keytool -import -alias trust_publicKey -file trust_key.cer -keystore publicKey.jks
Config 서버는 복호화 기능을 비활성화하고 공개키를 사용해 암호화만 수행하도록 설정합니다.
application.yml
encrypt:
key-store:
password: test1234
alias: trust_publicKey
location: classpath:/publicKey.jks
spring:
cloud:
config:
server:
encrypt:
enabled: false
Config 서버에서 /encrypt
엔드포인트를 통해 데이터를 암호화합니다.
curl -X POST http://localhost:8888/encrypt -d "mySecretValue"
결과:
Config 서버에서 /decrypt
엔드포인트를 통해 데이터 복호화가 불가합니다.
각 클라이언트에서 개인키가 포함된 apiEncryptionKey.jks
를 참조하도록 설정합니다.
application.yml
encrypt:
key-store:
password: test1234
alias: apiEncryptionKey
location: classpath:/apiEncryptionKey.jks
클라이언트에서 개인키를 활용해 암호화된 데이터를 복호화하는 데 성공했습니다.
Config 서버:
publicKey.jks
를 사용해 암호화 수행.spring.cloud.config.server.encrypt.enabled=false
).클라이언트:
apiEncryptionKey.jks
를 사용해 복호화 수행.Reference