Section 9: 설정 정보의 암호화 처리 - KwangtaekJung/MSA-SpringCloud-user-service GitHub Wiki

Section 9: 설정 정보의 암호화 처리

  • Encryption types
  • JCE
  • Symmetric Encryption
  • Asymmetiric Encryption

Encryption types

  • Symmetric Encryption (Shared)
    • Using the same key
  • Asymmetric Encryption (RSA Keypair)
    • Private and Public Key
    • Using java keytool

Java Cryptography Extension (JCE)

  • JAVA 8 버전 사용 시에는 오류가 발생할 수 있으며, 제한 없는 암호화 정책 파일로 교체해야 한다.
  • JAVA 11 버전 이상은 문제 없음.

Asymmetric Encryption

  • Public, Private Key 생성 -> JDK keytool 이용
    $ keytool -genkeypair -alias apiEncryptionKey -keyalg RSA \
    -dname "CN=Kenneth Lee, OU=API Development, O=joneconsulting.co.kr, L=Seoul, C=KR" \
    -keypass "1q2w3e4r" -keystore apiEncryptionKey.jks -storepass "1q2w3e4r"
    
PS C:\WorkSpace\study\inflearn\springcloud\keystore> keytool -list -keystore .\apiEncryptionKey.jks -v
키 저장소 비밀번호 입력:
키 저장소 유형: PKCS12
키 저장소 제공자: SUN

키 저장소에 1개의 항목이 포함되어 있습니다.

별칭 이름: apiencryptionkey
생성 날짜: 2022. 4. 1.
항목 유형: PrivateKeyEntry
인증서 체인 길이: 1
인증서[1]:
소유자: CN=Kenneth Lee, OU=API Development, O=joneconsulting.co.kr, L=Seoul, C=KR
발행자: CN=Kenneth Lee, OU=API Development, O=joneconsulting.co.kr, L=Seoul, C=KR
일련 번호: 1602a541
적합한 시작 날짜: Fri Apr 01 20:43:25 KST 2022 종료 날짜: Thu Jun 30 20:43:25 KST 2022
인증서 지문:
         SHA1: 62:76:38:BF:50:3D:6B:5C:5D:66:4B:8F:9A:D9:BF:62:F1:CB:12:8F
         SHA256: F7:EE:B2:C7:D5:3F:C7:6C:1B:35:8E:65:4C:02:BF:04:EB:CC:CB:F6:F4:3E:10:3D:D7:5B:1A:60:F7:E6:AB:9C
서명 알고리즘 이름: SHA256withRSA
주체 공용 키 알고리즘: 2048비트 RSA 키
버전: 3

확장:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 3F 1A 9F 73 4B 97 DD A0   2F 3C A1 24 1F 02 1E BA  ?..sK.../<.$....
0010: D5 DB E5 D4                                        ....
]
]



*******************************************
*******************************************
PS C:\WorkSpace\study\inflearn\springcloud\keystore> keytool -export -alias apiEncryptionKey -keystore apiEncryptionKey.jks -rfc -file trustServer.cer
키 저장소 비밀번호 입력:
인증서가 <trustServer.cer> 파일에 저장되었습니다.
PS C:\WorkSpace\study\inflearn\springcloud\keystore> keytool -import -alias trustServer -file trustServer.cer -keystore publicKey.jks
키 저장소 비밀번호 입력:
새 비밀번호 다시 입력:
소유자: CN=Kenneth Lee, OU=API Development, O=joneconsulting.co.kr, L=Seoul, C=KR
발행자: CN=Kenneth Lee, OU=API Development, O=joneconsulting.co.kr, L=Seoul, C=KR
일련 번호: 1602a541
적합한 시작 날짜: Fri Apr 01 20:43:25 KST 2022 종료 날짜: Thu Jun 30 20:43:25 KST 2022
인증서 지문:
         SHA1: 62:76:38:BF:50:3D:6B:5C:5D:66:4B:8F:9A:D9:BF:62:F1:CB:12:8F
         SHA256: F7:EE:B2:C7:D5:3F:C7:6C:1B:35:8E:65:4C:02:BF:04:EB:CC:CB:F6:F4:3E:10:3D:D7:5B:1A:60:F7:E6:AB:9C
서명 알고리즘 이름: SHA256withRSA
주체 공용 키 알고리즘: 2048비트 RSA 키
버전: 3

확장:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 3F 1A 9F 73 4B 97 DD A0   2F 3C A1 24 1F 02 1E BA  ?..sK.../<.$....
0010: D5 DB E5 D4                                        ....
]
]

이 인증서를 신뢰합니까? [아니오]:  yes
잘못된 응답입니다. 다시 시도하십시오.
이 인증서를 신뢰합니까? [아니오]:  예
인증서가 키 저장소에 추가되었습니다.
PS C:\WorkSpace\study\inflearn\springcloud\keystore> keytool -list -keystore publicKey.jks -v
키 저장소 비밀번호 입력:
키 저장소 유형: PKCS12
키 저장소 제공자: SUN

키 저장소에 1개의 항목이 포함되어 있습니다.

별칭 이름: trustserver
생성 날짜: 2022. 4. 1.
항목 유형: trustedCertEntry

소유자: CN=Kenneth Lee, OU=API Development, O=joneconsulting.co.kr, L=Seoul, C=KR
발행자: CN=Kenneth Lee, OU=API Development, O=joneconsulting.co.kr, L=Seoul, C=KR
일련 번호: 1602a541
적합한 시작 날짜: Fri Apr 01 20:43:25 KST 2022 종료 날짜: Thu Jun 30 20:43:25 KST 2022
인증서 지문:
         SHA1: 62:76:38:BF:50:3D:6B:5C:5D:66:4B:8F:9A:D9:BF:62:F1:CB:12:8F
         SHA256: F7:EE:B2:C7:D5:3F:C7:6C:1B:35:8E:65:4C:02:BF:04:EB:CC:CB:F6:F4:3E:10:3D:D7:5B:1A:60:F7:E6:AB:9C
서명 알고리즘 이름: SHA256withRSA
주체 공용 키 알고리즘: 2048비트 RSA 키
버전: 3

확장:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 3F 1A 9F 73 4B 97 DD A0   2F 3C A1 24 1F 02 1E BA  ?..sK.../<.$....
0010: D5 DB E5 D4                                        ....
]
]



*******************************************
*******************************************
PS C:\WorkSpace\study\inflearn\springcloud\keystore> keytool -list -keystore publicKey.jks
키 저장소 비밀번호 입력:
키 저장소 유형: PKCS12
키 저장소 제공자: SUN

키 저장소에 1개의 항목이 포함되어 있습니다.

trustserver, 2022. 4. 1., trustedCertEntry,
인증서 지문(SHA-256): F7:EE:B2:C7:D5:3F:C7:6C:1B:35:8E:65:4C:02:BF:04:EB:CC:CB:F6:F4:3E:10:3D:D7:5B:1A:60:F7:E6:AB:9C
PS C:\WorkSpace\study\inflearn\springcloud\keystore> keytool -list -keystore .\apiEncryptionKey.jks
키 저장소 비밀번호 입력:
키 저장소 유형: PKCS12
키 저장소 제공자: SUN

키 저장소에 1개의 항목이 포함되어 있습니다.

apiencryptionkey, 2022. 4. 1., PrivateKeyEntry,
인증서 지문(SHA-256): F7:EE:B2:C7:D5:3F:C7:6C:1B:35:8E:65:4C:02:BF:04:EB:CC:CB:F6:F4:3E:10:3D:D7:5B:1A:60:F7:E6:AB:9C
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----      2022-04-01   오후 8:43           2627 apiEncryptionKey.jks   => privateKey
-a----      2022-04-01   오후 8:49           1194 publicKey.jks          => publicKey
-a----      2022-04-01   오후 8:47           1282 trustServer.cer        => 인증서