두두의 메모

[Spring Boot]도메인 없이 Local에서 SSL 등록 및 적용(keytool) 본문

카테고리 없음

[Spring Boot]도메인 없이 Local에서 SSL 등록 및 적용(keytool)

두두(DoDu) 2023. 5. 25. 22:45
반응형

원래는 HTTPS 서비스를 운영하기 위해서는 일반적으로 신뢰할 수 있는 기관들로부터 비용을 지불하고 SSL 인증서를 발급받는다.

 

필자는 도메인이 없고 실제 서비스에 사용할 프로젝트도 아니다. 단지 순수 테스트를 위한 SSL 등록이 필요했다.

이 글은 로컬 환경에서만 SSL 인증서를 사용할 수 있는 방법에 대해 기록할 것이다.

 

개념을 적어가며 자세히 적고 싶지만 다른 블로그 작성자 분들이 자세하게 적어놓았기 때문에 맨 아래에 참고했던 블로그의 url을 남겨놓겠다.

 

 

SSL 인증 생성

1. keytool.exe 위치

- keytool.exe은 Java의 설치경로의 bin 디렉토리 아래에 위치한다.

 

 

 

2. keytool.exe 실행

- 한 작성자분은 [관리자권한으로실행]으로 실행시키면 프로그램이 실행된다는데 필자는 실행이 되지 않았음.

- 그래서 아래와 같은 방법으로 프로그램을 실행함.

 

① 명령프롬프트를 연다(cmd창)

Java의 설치경로의 bin 디렉토리 아래에 있는 keytool.exe를 실행시킨다.

cd Program Files/Java/jdk-11/bin  # bin디렉토리로 이동
keytool.exe # 실행

 

③ 아래와 같은 화면이 뜰 것이다.

 

 

 

3. keystore 생성

- 아래와 같은 명령어를 작성한다.

keytool -genkey -alias [keystore 별칭] -keyalg RSA -storetype PKCS12 -keystore [keystore 파일]

- 필자는 아래와 같은 명령어를 작성했다.

keytool -genkey -alias dummy -keyalg RSA -storetype PKCS12 -keystore dummy.pkcs12

- 이어서 나오는 질문에 대한 답을 하고 마지막에 yes를 치면 keystore가 생성되어 있다.

- 생성 위치는 keytool.exe가 있었던 위치(bin디렉터리 아래)다.

 

 

 

 

4. keystore의 인증서 추출하기

- 아래와 같은 명령어를 작성한다.

keytool -export -alias [keystore 별칭] -keystore [keystore 파일] -rfc -file [인증서 파일]

- 필자는 아래와 같은 명령어를 작성했다.

- 생성 위치는 위와 같이 keytool.exe가 있었던 위치(bin디렉터리 아래)다.

인증서(자신이 설정한 이름으로 뜬다. dummy.cer)가 정상적으로 추출된 모습을 볼 수 있다.

 

 

 

5. trust-store 생성

- 아래와 같은 명령어를 작성한다.

keytool -import -alias [trust keystore 별칭] -file [인증서 파일] -keystore [trust keystore 파일]

- 필자는 아래와 같은 명령어를 작성했다.

keytool -import -alias dummy-trust -file dummy.cer -keystore dummy-trust.pkcs12

- 아래와 같이 명령어를 작성하고 마지막에 yes를 입력하면 trust-store가 생성되어져 있다.

...생략...

- 생성 위치는 위와 같이 keytool.exe가 있었던 위치(bin디렉터리 아래)다.

정상적으로 추출된 모습을 볼 수 있다.

 

 

 

 

 

SSL 인증 적용

프로젝트에 복사하는 방법은 두 가지가 있었다.

① 루트에 복사하는 방법

② src/main/resources/ 아래에 복사

 

먼저 ②방법으로 설명하겠다.

 

 

1. 프로젝트에 복사

- 생성된 keystore, trust keystore, 인증서를 필자는 resource아래에 복사했다.

 

 

 

 

2. properties 설정

- SSL의 기본 포트는 443이기 때문에 필자는 server.port=443으로 설정했다.

- 위에서 작성한 keystore별칭, 파일 명 등을 넣으면 된다.

 

만일 프로젝트 루트(①번째 방법)에 넣었다면 아래와 같이 properties를 작성해야 한다.

즉, [classpath:]를 지우면 된다!

 

 

 

 

3. 접속

- 접속해보면 아래와 같이 '주의 요함'으로 뜨지만 https로 접속이 되는걸 확인할 수 있다. 

 

 

 

 

 

 

참고

1. https://jiwontip.tistory.com/83

 

Spring Boot에 Let's Encrypt SSL 적용하기

아파치나 NginX 같은 웹서버 없이 Spring Boot으로 만든 웹 어플리케이션에 무료 SSL 중 하나인 Let's Encrypt을 적용하게 되었다. 90일동안 사용가능하며 다시 갱신을 시켜줘야하나? 싶었지만 간단한 설

jiwontip.tistory.com

2. https://johngrib.github.io/wiki/why-http-80-https-443/

 

http의 기본 포트가 80, https의 기본 포트가 443인 이유는 무엇일까?

80은 처음부터 지정, 443은 나중에 요청을 받아 빈 공간으로 순서대로 배정

johngrib.github.io

3. https://activeks.tistory.com/entry/SSL-%EC%9D%B8%EC%A6%9D%EC%84%9C

 

SSL 인증서

1.2. SSL은 뭐고, 인증서는 뭔가? Secure Socket Layer(SSL) 프로토콜은 넷스케이프사에서 웹서버와 브라우저 간의 보안 통신을 위해 만들어졌다. SSL은 통신할 때 인증기관(Certificate Authority, CA)라는 것을

activeks.tistory.com

 

반응형
Comments