HTTPS 적용- AWS EC2, SSL, Let's Encrypt, Certbot

손지민·2024년 1월 22일

소셜 로그인

목록 보기
2/3

개요

  • Let's Encrypt는 무료로 SSL 인증서를 발급해주는 서비스이며, Certbot이라는 도구를 통해 쉽게 사용할 수 있습니다. 아래는 Spring Boot 애플리케이션에 Let's Encrypt SSL 인증서를 적용하는 과정입니다.

  • 환경
    Spring Boot, Spring Security, Java, Ec2-Amazon Linux2, gradle.kts빌드, application.yml

공부 중이므로 틀린내용, 의견, 질문 있으시면 댓글 달아주시면 큰 도움이 됩니다. 감사합니다.

Certbot 설치

  1. Amazon Linux2 에서는 epel-release를 설치해서 Certbot 을 설치해야합니다.
    아래의 명령어를 실행하여 'epel-release'를 설치할 수 있습니다.
    $ sudo amazon-linux-extras install epel
  2. 아래의 명령어로 certbot 을 설치할 수 있습니다.
    sudo yum install certbot

cerbot 을 사용하여 SSL 인증서를 발급

sudo certbot certonly --standalone -d your_domain
메인 도메인과 서브 도메인에 대한 SSL 인증서를 함께 발급 받고 싶다면 모든 도메인을 아래와 같이 명시 해야합니다.
sudo certbot certonly --standalone -d {메인 도메인} -d {서브 도메인}

pem 키 PKCS12로 변경

스프링부트에서 .pem 인식을 못하기 때문에 PKCS12 형식으로 변경합니다.
명령어 실행하면 비밀번호를 입력합니다. 입력하고 기억해줍니다.
(명령어 실행해도 아무 반응 없습니다.)

  • 형식
sudo openssl pkcs12 -export -in {경로}/fullchain.pem -inkey {경로}/privkey.pem -out {경로}/keystore.p12 -name ttp
  • ex
$ sudo openssl pkcs12 -export -in /etc/letsencrypt/live/wardservice.shop/fullchain.pem -inkey /etc/letsencrypt/live/wardservice.shop/privkey.pem -out /etc/letsencrypt/live/wardservice.shop/keystore.p12 -name ttp
  • 확인 명령어
    sudo ls {경로}/keystore.p12
    sudo ls /etc/letsencrypt/live/wardservice.shop/keystore.p12

Spring Boot 프로젝트에 application.yml 설정

server:
  port: 443  # HTTPS 포트
  ssl:
    enabled: true
    key-store: 키 경로/keystore.p12  # Let's Encrypt에서 발급받은 인증서의 전체 경로
    key-store-password: 키 스토어 비밀번호
    key-store-type: PKCS12  # 인증서 타입 (PEM 형식 사용)

별거 아니지만 server: 하위로 ssl: 넣는거 주의..! 이거 실수해서 https 적용 안되는거 고치느라 애먹었습니다..
enabled: true 는 스프링 부트에서는 명시적으로 쓰지 않아도 됩니다!

SSL 자동 갱신

매달 1일에 SSL 인증서를 자동으로 갱신하기 위해 cron 작업을 설정하려면 아래의 방법을 따라가세요.

  1. crontab 을 편집합니다.
    • crontab -e
  2. 편집 모드에서 다음과 같은 줄을 추가하고 저장합니다.
    • 0 0 1 * * certbot renew
  3. ESC 키를 눌러 명령 모드로 전환
    • ':wq' 입력 후 Enter 키를 눌러 변경사항을 저장하고 Vim을 종료합니다.
    • :qa! 입력 후 Enter 키를 눌러 변경사항을 저장하지 않고 Vim을 종료합니다.
  4. 확인 방법
    • sudo crontab -l
    • certbot의 로그 파일을 확인하여 자동 갱신 작업이 정상적으로 실행되고 있는지 확인할 수 있습니다:
      sudo cat /var/log/letsencrypt/letsencrypt.log

SSL 수동 갱신

  1. 명령어: sudo certbot renew
  2. 확인 방법: sudo crontab -l
profile
Developer

0개의 댓글