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

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

아파치나 NginX 같은 웹서버 없이 Spring Boot으로 만든 웹 어플리케이션에 무료 SSL 중 하나인 Let's Encrypt을 적용하게 되었다.

90일동안 사용가능하며 다시 갱신을 시켜줘야하나? 싶었지만 간단한 설정으로 자동갱신까지 가능하니 참 괜찮은 것 같다.

그리고 Let's Encrypt SSL 인증서 발급 방법은 여러가지가 있는데 그 중 standalone 방식을 택했다.

1) standalone

. 사이트 작동을 멈추고 이 사이트의 네크워킹을 이용해 사이트 유효성을 확인해 Let’s Encrypt SSL 인증서를 발급하는 방식

. 80포트로 가상 standalone 웹서버를 띄워 인증서를 발급

. 이 방식은 동시에 여러 도메인을 발급 받을 수 있음

. 자동갱신 가능 2) webroot

. 사이트 디렉토리 내에 인증서 유효성을 확인할 수 있는 파일을 업로드하여 인증서를 발급

. 실제 작동하고 있는 웹서버의 특정 데렉토리의 특정 파일 쓰기 작업을 통해서 인증

. 이 방식의 장점은 서버를 중단없이 발급 가능

. 이 방법의 단점은 인증 명령에 하나의 도메인 인증서만 발급 가능

. 자동갱신 가능 3) DNS

. 도메인을 쿼리해 확인되는 TXT 레코드로 사이트 유효성을 확인하는 방법

. 와일드 카드 방식으로 인증서를 발급 가능

. 이 방법은 당연하게도 서버 관리자가 도메인 DNS를 관리/수정할 수 있어야 하며

. 인증서 갱신 시마다 DNS에서 TXT값을 변경해야

이제부터 standalone 방식으로 인증서를 발급받아 SSL을 적용해보자.

(적용하기 위해 이미 웹 어플리케이션은 배포된 상태여야 하며, 도메인 주소를 가지고 있어야 한다. )

STEP1. 터미널로 리눅스 서버에 원격 접속한다.

STEP2. Certbot을 설치한다.

sudo apt-get install certbot

STEP3. 기존에 사용중인 80 포트는 kill 한다.

STEP4. Certbot을 어떤 방식으로 구동시킬 지 선택한다. (난 standalone 방식을 택했다.)

sudo certbot certainly --standalone

위 그림처럼 입력하면 이메일을 입력하라고 나타나고 이메일을 입력하면 된다.

곧이어 동의 절차글이 나타난다. A, Y를 차례대로 입력하고 마지막으로 ssl 인증설르 발급받을 도메인을 입력한다.

여려기 입력 가능하다. ex) naver.com www.naver.com

위처럼 Congratulations!! 문구가 뜨면 성동! 그리고 /etc/letsencrypt/live/도메인/ 경로에 fullcahin.pem과 privkey.pem 가 발급되었다고 안내한다. 위에서 알려주는 경로로 이동하자. (live 폴더 이상 안들어가진다면 접근권한이 없는 것이므로 접근권한을 바꿔주거나 root로 들어가면 live폴더 이상 접근 가능하다.)

STEP5. pem은 스프링 부트에서 인식을 못하므로, pem을 PKCS12 형식으로 변경

-fullchain.pem, privkey.pem 등이 발급받아진 경로로 이동 한 뒤 아래 명령어를 입력하면 keystore.p12 파일이 생성된다.

sudo openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name ttp -CAfile chain.pem -caname root

- 위 명령어 진행 후 Enter Export Password가 나오는데 이때 비밀번호는 스프링 부트에 적용시 필요한 비밀번호이므로 잘 기억해두자.

STEP6. 스프링 부트에 적용시키기 위해 변환된 keystore.p12을 로컬로 가져와야한다.

난 FileZilla를 통해 keystore.p12이 있는 경로로 가서 로컬로 가져오는 방식을 택했다. (드래그 드랍만 해주면 로컬로 가져온다)

STEP7. Spring Boot에 적용시키자

- resources 폴더 아래에 ssl 디렉토리를 생성한 뒤, 그곳에다가 keystore.p12을 넣자.

STEP8. Spring Boot의 application.yml 수정

server: port: 443 ssl: key-store: classpath:ssl/keystore.p12 key-store-type: PKCS12 key-store-password: 변환후입력헀던비밀번호

이제 웹 어플리케이션을 배포해서 https 까지 붙였을때 잘 뜨면 성공이다!

from http://jiwontip.tistory.com/83 by ccl(A) rewrite - 2021-12-28 10:27:07