SpringBoot에 SSL 인증서를 적용해보자 (feat. AWS EC2)

Panda·2023년 2월 16일
3

Spring

목록 보기
33/42

준비물

  • 도메인 (프로젝트 팀원이 구해다 주셨어요 정말 감사합니다~~)
  • EC2 인스턴스

EC2 세팅

보안 그룹

HTTP, HTTPS 가 허용되어 있어야 합니다.

도메인과 EC2 연결

Rout53

  • 호스팅 영역 생성

발급받으신 도메인을 입력해 생성하시면 됩니다.

  • 레코드 세트 생성
    • EC2 IP 연결

값에다가 EC2 Public IP를 입력해주시면 됩니다.
여기서 www.도메인 을 사용하시고 싶으시면 레코드 이름에 www 를 입력해주시면 됩니다.
(레코드를 여러개 추가해서 [도메인, www.도메인] 둘다 사용 가능합니다.)

  • 네임서버 설정

편집실력이 부족해서 모자이크가 더럽게 범벅이 되어버렸네요 ㅋㅋㅋ
NS유형의 레코드 4가지의 값을 도메인 등록 하신 곳에서 네임서버로 등록하시면 됩니다!!
(도메인 발급한게 제가 아니라서 네임서버 등록은 사진이 없습니다 ㅠㅠ)

SSL 인증서 발급

Let’s Encrypt

무료 SSL 인증서

발급 방식

  • standalone
    • 사이트 작동을 멈추고 이 사이트의 네트워킹을 이용해 사이트 유효성을 확인해 SSL 인증서 발급
    • 동시에 여러 도메인 발급 가능
    • 자동갱신 가능
  • webroot
    • 사이트 디렉토리 내에서 인증서 유효성을 확인할 수 있는 파일을 업로드하여 인증서 발급
    • 실제 작동하고 있는 웹서버의 특정 디렉토리의 특정 파일 쓰기 작업을 통해서 인증
    • 서버 중단없이 발급 가능
    • 하나의 도메인 인증서만 발급 가능
    • 자동갱신 가능
  • DNS
    • 도메인을 쿼리해 확인되는 TXT 레코드로 사이트 유효성을 확인하는 방법
    • 와일드 카드 방식으로 인증서를 발급
    • 인증서 갱신마다 DNS에서 TXT값을 변경해야 함

먼저 SSH로 EC2 인스턴스에 접속해봅시다. 그리고 certbot을 사용해 SSL 인증서를 발급 받을거에요.

sudo yum install certbot

  • EC2 리눅스에서 certbot 설치하는 법

sudo certbot certonly —standalone

  • 발급 받은 도메인을 입력해서 SSL 인증서를 발급 받습니다.

발급이 성공하게 되면 /etc/letsencrypt/live/도메인 경로에 fullchain.pem 과 privkey.prem이 발급이 되었다고 나옵니다. 해당 경로로 이동합니다. (참고로 root 계정으로 이동해야 합니다.)

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

  • .pem은 스프링부트에서 인식못하기 때문에 pem을 PKCS12 형식으로 변경합니다.
  • 명령어를 실행하고 나면 비밀번호를 입력하는데 입력해주시고 꼭 기억해주세요.
  • 결과물 : keystore.p12

이렇게 발급한 SSL 인증서는 90일 동안만 사용이 가능합니다.
하지만 항상 방법은 있는법!! 자동갱신 가능합니다.

SSL 인증서 자동갱신

// Crontab 보기
crontab -l

// Crontab 편집
crontab -e
// 매달 1일에 SSL 인증서 갱신 하는 명령어
0 2 1 * * /usr/bin/certbot renew

crontab 편집모드로 들어가서 매달 1일에 자동 갱신되는 명령어를 입력하고 저장합니다.

기타 명령어

  • certbot certificates : SSL 인증서 정보 표시 (만료일 확인 가능)
  • certbot renew —dry-run : SSL 인증서 갱신 테스트

SpringBoot 세팅

NginX 설정파일을 직접 설정할 수도 있긴 하지만 더 간편한 방법이 존재하길래 쉬운 길을 선택하였습니다.

Resources에 SSL 인증서 파일 넣기

아까 EC2 인스턴스에서 PKCS12 형식으로 변경하고 나면 keystore.p12 파일이 생성 될텐데 그 파일을 resources/ssl 에 넣어주시면 됩니다. (저는 파일질라로 가져와서 넣어줬어요.)

application-dev.proeprties

원하시는 properties 파일에 keystore 설정과 port 443(Https) 을 설정해주세요.
비밀번호는 아까 PKCS12 변경하면서 외워둔 비밀번호를 쓰시면 됩니다.
스프링부트에서는 설정 이것만 해주시면 끝입니다. 참 쉽죠?
자 세팅을 전부 완료했으니 한번 배포하여 잘 작동하나 확인해 볼까요?

결과

우왕 제대로 작동됩니다!!
진짜 이 화면 보고나서 얼마나 뿌듯했는지 ㅋㅋㅋㅋㅋㅋ
무엇보다 포트번호 안 적고 들어갈수 있어서 너무 편하네요

이렇게 간단한데 나는 삽질을 했다..

처음에 SSL 발급 받을 때 자꾸 에러가 발생하여 좀 삽질을 하였습니다.

DNS 어쩌고 저쩌고 해당 도메인이 존재합니다! 라는 에러가 떠서 아 이거 도메인이 이미 있는건가 보다 하고 도메인 이름들을 이것저것 해보았지만 에러가 계속 나는 것을 보고 무언가 잘못되었다고 깨달았네요…

도메인을 발급안받은 상태에서 SSL 인증서 발급할때 도메인 입력하는 부분에서 도메인까지 같이 발급해는줄 알아가지고 삽질을 좀 했습니다………………….
허허허허허허……………

또 삽질까지는 아닌데 파일질라로 keystore파일 가져오려고 했으나 root 권한이 없어 해당 디렉토리에 접근을 못해서 EC2 인스턴스에서 PermitRootLogin을 설정해줬네여

뭐 하나 할때마다 설정해줘야하고 에러나면 에러원인 찾아서 해결해야되니까
삽질을 좀 한것같습니다……..
IaaS가 확실히 이것저것 설정을 해줘야하니까 힘드네요
다하는데 6~7시간 정도 걸린듯.......

profile
실력있는 개발자가 되보자!

2개의 댓글

comment-user-thumbnail
2023년 6월 26일

(참고로 root 계정으로 이동해야 합니다.)
이 부분 좀 막혔어서, 다른 분들 안 막히시라고 명령어 공유드리면,
sudo -s로 진행하시면 되고

그 외에 설치 명령어 애초에 안 되는 분들은
sudo apt update
sudo apt install certbot python3-certbot-apache
sudo certbot --apache
이렇게 시도해 보세요.

답글 달기
comment-user-thumbnail
2024년 5월 10일

없는 부분이 많네

답글 달기