Springboot 암호화/복호화
1. 대칭키를 이용한 암호화
Bootstrap이 자동으로 ‘{cipher}’로 시작하는 yaml파일의 text를 decrypt 한다. 이 때 bootstrap.yml에 있는 key를 사용한다
- pom.xml 설정
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>11</java.version>
<spring-cloud.version>2020.0.1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
- encrypt key 설정
- bootstrap.yml
encrypt:
key: 1234567890
- Encrypt API 호출
[POST] http://localhost:8088/encrypt
[body > row > text]
[request body]
password
[return value]
01dc766ab8cdb62c2dc1b30853609965a522962f1fe10d6ad2ad8195fca2cffe
- Decrypt API 호출 테스트
[POST] http://localhost:8088/decrypt
[body > row > text]
[request body]
01dc766ab8cdb62c2dc1b30853609965a522962f1fe10d6ad2ad8195fca2cffe
[return value]
password
- 활용
- application.yml
spring:
security:
user:
name: admin
password: '{cipher}01dc766ab8cdb62c2dc1b30853609965a522962f1fe10d6ad2ad8195fca2cffe'
2. 비대칭키를 이용한 암호화
JDK의 keytool을 활용해서 private key와 public key 생성한다. 생성된 private key를 이용해 encrypt 하면 public key를 이용해 decrypt한다 (또는 그 반대)
-
pom.xml 설정 -> ## 대칭키를 이용한 암호화와 동일
-
비대칭키 생성
# key file 보관할 directory 생성
$cd ~/workspace/spring-learning/spring-cloud
$mkdir keystore
$cd keystore
#private key 파일 생성
$keytool -genkeypair -alias apiEncryptionKey -keyalg RSA -dname "CN=Kalphageek, OU=API Development, O=me.kalpha, L=Seoul, C=KR" -keypass "test1234" -keystore apiEncryptionKey.jks -storepass "test1234"
#private key 확인
$ls -al
$keytool -list -keystore apiEncryptionKey.jks [-v]
password> test123
#인증서 파일 생성 : 여기서는 사용 안함
$keytool -export -alias apiEncryptionKey -keystore apiEncryptionKey.jks -rfc -file trustServer.cer
$ls -al
#public key 파일 생성 : 여기서는 사용 안함
$keytool -import -alias trustServer -file trustServer.cer -keystore publicKey.jks
password :> test1234
certificate?> yes
#파일 확인
#config-service에서는 private key만 사용
$ls -al
apiEncryptionKey.jks #private key
publicKey.jks #public key
trustServer.cer #인증서
- private key 설정
- bootstrap.yml
encrypt:
location: file:///home/kalphageek/workspace/spring-learning/spring-cloud/keystore/apiEncryptionKey.jks
alias: apiEncryptionKey
password: test1234
-
Encrypt API 호출 -> ## 대칭키를 이용한 암호화와 동일
-
Decrypt API 호출 -> ## 대칭키를 이용한 암호화와 동일
-
활용 -> ## 대칭키를 이용한 암호화와 동일