1 분 소요

1. 대칭키를 이용한 암호화

Bootstrap이 자동으로 ‘{cipher}’로 시작하는 yaml파일의 text를 decrypt 한다. 이 때 bootstrap.yml에 있는 key를 사용한다

  1. 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>
  1. encrypt key 설정
  • bootstrap.yml
encrypt:
  key: 1234567890
  1. Encrypt API 호출
[POST] http://localhost:8088/encrypt
[body > row > text]
[request body]
password
[return value]
01dc766ab8cdb62c2dc1b30853609965a522962f1fe10d6ad2ad8195fca2cffe
  1. Decrypt API 호출 테스트
[POST] http://localhost:8088/decrypt
[body > row > text]
[request body]
01dc766ab8cdb62c2dc1b30853609965a522962f1fe10d6ad2ad8195fca2cffe
[return value]
password
  1. 활용
  • application.yml
spring:
	security:
		user:
			name: admin
			password: '{cipher}01dc766ab8cdb62c2dc1b30853609965a522962f1fe10d6ad2ad8195fca2cffe'

2. 비대칭키를 이용한 암호화

JDK의 keytool을 활용해서 private key와 public key 생성한다. 생성된 private key를 이용해 encrypt 하면 public key를 이용해 decrypt한다 (또는 그 반대)

  1. pom.xml 설정 -> ## 대칭키를 이용한 암호화와 동일

  2. 비대칭키 생성

# 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       #인증서
  1. private key 설정
  • bootstrap.yml
encrypt:
  location: file:///home/kalphageek/workspace/spring-learning/spring-cloud/keystore/apiEncryptionKey.jks
  alias: apiEncryptionKey
  password: test1234
  1. Encrypt API 호출 -> ## 대칭키를 이용한 암호화와 동일

  2. Decrypt API 호출 -> ## 대칭키를 이용한 암호화와 동일

  3. 활용 -> ## 대칭키를 이용한 암호화와 동일