요즘 웹사이트는 기본적으로 HTTPS를 바탕으로 동작한다. HTTPS의 S는 secure을 나타내는 약자로 HTTP통신을 통해 주고받는 데이터를 암호화 하는 것을 말한다. 즉, 안전한 사이트라는 걸 인증하기 위해선 HTTPS를 적용시켜야 한다.
그렇다면 HTTPS를 적용시키기 위한 방법을 살펴보자.
SSL 인증서 없이 웹 어플리케이션을 서버에 올리면 http로 접속이 되고 아래와 같은 경고가 나타난다.
"주의요함"
접속은 가능하지만 무언가 찝찝한 느낌이 든다. 따라서 우리는 보안을 위해 HTTPS를 적용시켜 볼 것이다.
웹 어플리케이션에 SSL 인증서를 적용하면 보안연결(https - http Secure) 접속이 가능하다.
spring-boot에 무료 SSL 인증서 적용을 통해 보안연결을 적용해봤다.
1) Let's Encrypt
SSL은 CA(Certificate Authority, 인증기관)에서 유료로 발급해주는 인증서로
보안연결(https)을 가능하게 한다.
https의 보급을 위해 mozilla, cisco, chrome, meta, aws 등 다양한 기관에서
후원을 해 2016년에 Let's Encrypt 라는 이름의 무료 인증기관이 생겼다.
그러나 이 무료 인증기관은 한 가지 단점이 있는데,
3개월마다 SSL을 갱신해야한다.
Certbot은 3개월마다 갱신해야하는 번거로움을 자동화해주는 오픈소스이며,
Let's Encryt에서도 이 방식을 추천한다.
2) Certbot 설치 / SSL 발급
https://certbot.eff.org/instructions 에서 상세 방법을 찾아볼 수 있다.
① snap 설치
② snap을 통한 certbot 설치
③ certbot을 통한 SSL 발급
2가지 방법이 있다. (standalone : 서버 재시작 필요 / webroot : 서버 재시작 불필요)
spring-boot의 경우 web app에 인증서를 포함시키는게 설정이 편해보여 standalne을 택했다.
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 설정이 가능하다.
1) SSL인증서를 spring boot에서 필요한 형식(PKCS12)로 변환
2) keystore.p12 파일을 /src/main/resources에 이동
application.properties 설정 (application.yml에서 설정해도 상관없음)
3) spring-boot 빌드 후 upload
위의 과정을 거치면 좌물쇠모양의 아이콘이 url옆에 뜨는걸 확인할 수 있다.
이렇게 되면 HTTPS가 적용된 웹사이트가 완성된다.