본문 바로가기

아키텍처 Architecture/Software Architecture

SpringBoot 무료 SSL 인증서 적용하기 (Certbot)

1. 필요성

SSL 인증서 없이 웹 어플리케이션을 서버에 올리면 http로 접속이 되고

아래와 같은 경고가 나타난다.

"주의요함"

클릭해보면 보안이 취약하다는 문구가 뜨는게

내가 만들었지만 들어가기 싫어진다.

 

이때, 웹 어플리케이션에 SSL 인증서를 적용하면 보안연결(https - http Secure) 접속이 가능하다.

spring-boot에 무료 SSL 인증서 적용을 통해 보안연결을 적용해봤다.

 

2. Certbot을 통한 SSL 발급

1) Let's Encrypt - 알면 좋지만 몰라도 상관없음

더보기

SSL은 CA(Certificate Authority, 인증기관)에서 유료로 발급해주는 인증서로

보안연결(https)을 가능하게 한다.

 

https의 보급을 위해 mozilla, cisco, chrome, meta, aws 등 다양한 기관에서

후원을 해 2016년에 Let's Encrypt 라는 이름의 무료 인증기관이 생겼다.

https://letsencrypt.org/

 

그러나 이 무료 인증기관은 한 가지 단점이 있는데, 

3개월마다 SSL을 갱신해야한다. 

 

Certbot은 3개월마다 갱신해야하는 번거로움을 자동화해주는 오픈소스이며, 

Let's Encryt에서도 이 방식을 추천한다.

https://certbot.eff.org/

 

 

2) Certbot 설치 / SSL 발급

* 서버 OS : Centos7 환경 기준, 다른 OS의 경우

https://certbot.eff.org/instructions  에서 상세 방법을 찾아볼 수 있다.

 

① snap 설치

--1) snap 설치를 위한 epel-release 설치
sudo yum install epel-release

--2) snap 설치
sudo yum install snapd

sudo systemctl enable --now snapd.socket

sudo ln -s /var/lib/snapd/snap /snap

 

② snap을 통한 certbot 설치

sudo snap install core

sudo snap refresh core

sudo snap install --classic certbot

sudo ln -s /snap/bin/certbot /usr/bin/certbot

 

③ certbot을 통한 SSL 발급

 - 2가지 방법이 있다. (standalone : 서버 재시작 필요 / webroot : 서버 재시작 불필요)

 - spring-boot의 경우 web app에 인증서를 포함시키는게 설정이 편해보여 standalne을 택했다.

sudo certbot certonly --standalone

 

- 이메일 입력, 도메인 입력 등을 하고 나면 아래와 같은 log가 나오며 SSL 인증서가 발급된다.

 

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/subbak2.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/subbak2.com/privkey.pem

 

- 스프링부트가 아닌 다른 웹 어플리케이션을 이용한다면

발급받은 pem 파일을 통해 https 설정이 가능하다.

 

3. SpringBoot에 SSL 적용

1) SSL인증서를 spring boot에서 필요한 형식(PKCS12)로 변환

- pem 파일이 위치한 경로에서 진행

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

- password를 입력하라고 나오는데 원하는 password로 설정하면 된다. 

 

2) keystore.p12 파일을 /src/main/resources에 이동

   application.properties 설정 (application.yml에서 설정해도 상관없음)

#SSL 
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-type=PKCS12
server.ssl.key-store-password=내가정한password

 

3) spring-boot 빌드 후 upload 

보안연결(https) 적용 완료

반응형