티스토리 뷰

 

원문 : 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 인증서를 생성 하고 해당 인증서를 개발자 각각의 시스템에 설치 하면 된다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함