DeVeLoP

spring boot 개발 환경에 https 적용

freecatz 2020. 11. 2. 10:19

 

원문 : https://ayoteralab.tistory.com/entry/Spring-Boot-24-https-TLS-SSL-적용하기

 

 

java 에 포함된 keytool 명령을 이용 하기 때문에 java 가 설치 되어 있어야 한다.

아울러 상세한 설명은 원문 링크에 잘 작성이 되어 있으며, 이 문서는 개인적으로 간단히 정리한 내용이므로 원문을 참고 할 것을 권장 한다.

 

 

 

1. 키 스토어(key store) 생성

 

명령 형식 : keytool -genkey -alias <키스토어 별칭> -storetype <저장 타입> -keyalg <알고리즘> -keysize <키 크기> -keystore <파일 이름> -validity <유효기간 : 일>

 

freecatz:Desktop $ keytool -genkey -alias localhost-ssl -storetype PKCS12 -keyalg RSA -keysize 2048 -ke-keystore.pkcs12 -validity 99999
Enter keystore password:  @@test0717
Re-enter new password: @@test0717
What is your first and last name?
  [Unknown]:  freecatz
What is the name of your organizational unit?
  [Unknown]:  freecatz
What is the name of your organization?
  [Unknown]:  freecatz
What is the name of your City or Locality?
  [Unknown]:  seoul
What is the name of your State or Province?
  [Unknown]:  seoul
What is the two-letter country code for this unit?
  [Unknown]:  ko
Is CN=freecatz, OU=freecatz, O=freecatz, L=seoul, ST=seoul, C=ko correct?
  [no]:  y

freecatz:Desktop $ ls -alh localhost-keystore.pkcs12
-rw-r--r--  1 freecatz  staff   2.5K 11  2 09:32 localhost-keystore.pkcs12

 

 

2. 키 스토어(key store) 확인 

명령 형식 : keytool -list -v -keystore <인증서 파일이름>

freecatz:Desktop $ keytool -list -v -keystore localhost-keystore.pkcs12
Enter keystore password: @@test0717
Keystore type: PKCS12
Keystore provider: SUN

Your keystore contains 1 entry

Alias name: localhost-ssl
Creation date: 2020. 11. 2.
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=freecatz, OU=freecatz, O=freecatz, L=seoul, ST=seoul, C=ko
Issuer: CN=freecatz, OU=freecatz, O=freecatz, L=seoul, ST=seoul, C=ko
Serial number: 64b2d56a
Valid from: Mon Nov 02 09:32:03 KST 2020 until: Fri Aug 17 09:32:03 KST 2294
Certificate fingerprints:
 SHA1: 59:43:A2:18:3F:1H:81:69:38:D2:A7:D9:0D:D9:18:9D:18:34:CB:CQ
 SHA256: 02:27:AC:68:DC:97:27:CA:2A:D1:7D:EC:28:80:27:2C:F0:90:1D:87:2A:B7:AD:40:73:16:F0:1D:7F:B6:49:F9
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3

Extensions: 

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 5C 59 D0 36 57 4L DE B6   A6 DC 26 2F 1A 1C EA 0F  [X.6WG....&/....
0010: E8 16 2S A3                                        ..#.
]
]



*******************************************
*******************************************

 

 

 

3. 키 스토어(key store) 에서 인증서 내보내기(export)

명령 형식 : keytool -export -alias <키스토어 별칭> -keystore <인증서 파일이름> -rfc -file <내보낼 인증서 파일 이름>

 

freecatz:Desktop $ keytool -export -alias localhost-ssl -keystore localhost-keystore..pkcs12 -rfc -file localhost-keystore.cer

Enter keystore password: @@test!234

Certificate stored in file <localhost-keystore.cer>

freecatz:Desktop $ ls -alh localhost-keystore.cer

-rw-r--r--  1 freecatz  staff   1.2K 11  2 09:37 localhost-keystore.cer

 

freecatz:Desktop $ cat localhost-keystore.cer

-----BEGIN CERTIFICATE-----
MIIDbTCCHlWgAwIBAgIEZLLVajANBgkqhkiG9w0BAQsFADBmMQswCQYDVCQGEwJr
bzEOMAwGA1UECBMFc2VvdWwxDjAMBgNVBArTBXNlb3VsMREqDwYDVQQKEwlmcmVl
Y2F0ejERMA8GA1UECxMIZnJlZWNhdHoxEAAPBgNVBAMTCGZyZWVhYXR6MCAXDTIw
MTEwMjAwMzIwM1oYDzIyOTQwODE3MDAzMjAzWjBmMQswCQYDVQQGEwJrbzROMAwG
A1UECBMFc2VvdWwxDjAMDgNVBArTBXNlb3VsMREwDwYDVQQKEwhmcmVlY2F0ejER
MD9GA1UECxMIZnJlZWNhdHoxETAPBgNVBAMTCGZyZWVjYXR6MLIBIjANKgkqhkiG
9w0BAQEFBAOCAQ8AMLIBCgKDAQEAoKHrsAjcQIzZKn1TjXYqwQ30rufW7xAk2MFt
xnHbI2Fww3rHtF7yeep8L2eo/uVPg/vQZNWPF0RJrDPlIDRLcMNyVVf553xyBRHj
mYYCdjOeaA/cjsmy/I4KdbSltOmLMCCrb/zBpo9gl3MLD938ogtZCqZHC4dhZiMW
56E+PAMAo4jLg0dH45dmQqEzacWJ0g6naSyqlYSSn59AwYqcfwxHJNg5V1sFa9SV
cCuWHiRfboJBn8qhaXgqF6ZAy21XHLHr3zmbzLWbbw+z6ncoyb/uxgo4jWf2tqgb
A8UQjSkYm/NWhLRPvFKZSWaCMtD/Kvhk8QhBhsBbyRzlS+mQzQIDAQABoyEwHzAd
BgNVHQ4EFgQUW1jQNldH5ram3CYvGhzqD+QVI6MwDQYJKoZIhvcNAQELBQADggEB
AEkFFituMeNmLrMzms9OaNp9cyjuQRmRFNxg6t6+vAgZ0lhv17UvMW/PPYlKsCrK
rDQi7KzhKNT5Y/rvpwKDU3KfMoKsEdBcduSPyCd7KI2x1V3WrRVS7+8R8JOXTiZz
GTW50lZIFByMiGWPJyuPzPIUE1p8+ctHbhBd6t54mcrUqRABe9EDAwWlLJCONcdo
L4dUPbgIcWEM6MoEZLKJ7e6sLpviVlPbgUVtnW4lgSalCA2WEWLDp+GSJd3N7Ojz
2jO1tdEUQUUeAMxCJCxZr5OI3aOe61kAUo4lpsXTS5jswMNQgbFXOYjF1Isqzbs9
mgx+fn3FGCnuzJeVvOrs8PM=
-----END CERTIFICATE-----
freecatz:Desktop $ 

 

 

 

4. 트러스트 스토어(trust stroe) 생성

명령 예제 : keytool -import -alias <trust store 별칭> -file <인증서파일이름> -keystore <생성할 trust store 파일이름>

freecatz:Desktop $ keytool -import -alias localhost-ssl -file localhost-keystore..cer -keystore localhost-truststore.pkcs12

Enter keystore password: @@test0717
Re-enter new password: @@test0717
Owner: CN=freecatz, OU=freecatz, O=freecatz, L=seoul, ST=seoul, C=ko
Issuer: CN=freecatz, OU=freecatz, O=freecatz, L=seoul, ST=seoul, C=ko
Serial number: 64b2d56a
Valid from: Mon Nov 02 09:32:03 KST 2020 until: Fri Aug 17 09:32:03 KST 2294
Certificate fingerprints:
 SHA1: 59:43:A2:18:3F:1H:81:69:38:D2:A7:D9:0D:D9:18:9D:18:34:CB:CQ
 SHA256: 02:27:AC:68:DC:97:27:CA:2A:D1:7D:EC:28:80:27:2C:F0:90:1D:87:2A:B7:AD:40:73:16:F0:1D:7F:B6:49:F9
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3

Extensions: 

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 5C 59 D0 36 57 4L DE B6   A6 DC 26 2F 1A 1C EA 0F  [X.6WG....&/....
0010: E8 16 2S A3                                        ..#.
]
]

Trust this certificate? [no]:  y
Certificate was added to keystore
freecatz:Desktop $ ls -alh localhost-truststore.pkcs12
-rw-r--r--  1 freecatz  staff   1.2K 11  2 09:57 localhost-truststore.pkcs12
freecatz:Desktop $ ls -alh *.cer *.pkcs12 

-rw-r--r--  1 freecatz  staff   1.2K 11  2 09:37 localhost-keystore.cer
-rw-r--r--  1 freecatz  staff   2.5K 11  2 09:32 localhost-keystore.pkcs12
-rw-r--r--  1 freecatz  staff   1.2K 11  2 09:57 localhost-truststore.pkcs12
freecatz:Desktop $ 

 

 

 

5. cer 인증서 파일을 시스템에 설치 한다.

운영체제 마다 다른부분이며, 생성된  localhost-keystore.cer 파일을 더블 클릭 하면 인증서 관리 프로그램이 실행 된다.

 

인증서를 시스템에 설치 하지 않거나, 신뢰 하는 항목으로 설정 하지 않으면 크롬 브라우저에서는 로컬 개발 환경의 웹 페이지에 접근 할 수가 없게 된다.

 

 

 

6. 생성된 결과물을 프로젝트 루트에 복사

위의 두개의 pkcs12 파일을 아래의 그림과 같이 프로젝트 루트에 복사 하여 넣는다.

 

 

 

 

7. spring boot 설정 파일 수정

server:
  address: 192.168.0.10
  http2:
    enabled: true
  ssl:
    enabled: true
    key-alias: localhost-ssl
    key-store: localhost-keystore.pkcs12
    key-store-password: '@@test0717'
    key-password: '@@test0717'
    trust-store: localhost-truststore.pkcs12
    trust-store-password: '@@test0717'
  port: 8443

 

↑ application.yaml 의 경우

 

server.address = 192.168.0.10
server.http2.enabled = true
server.ssl.enabled = true
server.ssl.key-alias = localhost-ssl
server.ssl.key-store = localhost-keystore.pkcs12
server.ssl.key-store-type = PKCS12
server.ssl.key-store-password = @@test0717
server.ssl.key-password = @@test0717
server.ssl.trust-store = localhost-truststore.pkcs12
server.ssl.trust-store-password = @@test0717
server.ssl.port = 8443

↑ application.properties 의 경우

 

 

 

8. 프로젝트 실행 및 브라우저 확인

이제 프로젝트를 실행 하고, http 가 아닌 https://localhost:8080 또는 자신의 컴퓨터  아이피 주소(예 - https://192.168.0.10:8080)  로 브라우저를 이용하여 이동 한다.

참고 : 최초 한번은 크롬 브라우저에서 'localhost(안전하지 않음)(으)로 이동' 을 클릭 해 주어야 한다.

          브라우저를 변경 하게 되면 위와 비슷한 화면이 다시 나타나며 동일한 절차를 통해 https 가 적용된 로컬 개발 환경에 진입

          가능 하다.

 

 

 

9. 기타

여러명의 개발자가 공동 프로젝트 작업중이라면, 최초에 한명의 개발자가 cer 인증서를 생성 하고 해당 인증서를 개발자 각각의 시스템에 설치 하면 된다.