Let's Encrypt는 무료로 SSL 인증서를 발급해주는 서비스이며, Certbot이라는 도구를 통해 쉽게 사용할 수 있습니다. 아래는 Spring Boot 애플리케이션에 Let's Encrypt SSL 인증서를 적용하는 과정입니다.
환경
Spring Boot, Spring Security, Java, Ec2-Amazon Linux2, gradle.kts빌드, application.yml
공부 중이므로 틀린내용, 의견, 질문 있으시면 댓글 달아주시면 큰 도움이 됩니다. 감사합니다.
$ sudo amazon-linux-extras install epelsudo yum install certbotsudo certbot certonly --standalone -d your_domain
메인 도메인과 서브 도메인에 대한 SSL 인증서를 함께 발급 받고 싶다면 모든 도메인을 아래와 같이 명시 해야합니다.
sudo certbot certonly --standalone -d {메인 도메인} -d {서브 도메인}
스프링부트에서 .pem 인식을 못하기 때문에 PKCS12 형식으로 변경합니다.
명령어 실행하면 비밀번호를 입력합니다. 입력하고 기억해줍니다.
(명령어 실행해도 아무 반응 없습니다.)
sudo openssl pkcs12 -export -in {경로}/fullchain.pem -inkey {경로}/privkey.pem -out {경로}/keystore.p12 -name ttp
$ 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.p12sudo ls /etc/letsencrypt/live/wardservice.shop/keystore.p12server:
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 는 스프링 부트에서는 명시적으로 쓰지 않아도 됩니다!
매달 1일에 SSL 인증서를 자동으로 갱신하기 위해 cron 작업을 설정하려면 아래의 방법을 따라가세요.
crontab -e0 0 1 * * certbot renewsudo crontab -lsudo cat /var/log/letsencrypt/letsencrypt.logsudo certbot renewsudo crontab -l