개발공부/Linux

[Linux] nginx에 certbot으로 SSL(https) 보안 인증서 적용하기

차나니 2024. 5. 4. 19:19

프로젝트를 배포하고 SSL 설정은 급한게 아니라 천천히 하려고 했지만 배포한 http에서 cookie에 저장이 안되는 이슈가 생겼다....이유는 https 적용할 경우 해결된다고 해서 부랴부랴 cerbot으로 SSL 적용을 했다 !

 

Let's Encrypt이란 ?

Let's Encrypt는 무료 SSL/TLS 인증서를 얻고 설치할 수 있는 인증 기관으로, 웹 서버에서 암호화된 HTTPS를 사용할 수 있도록 해줍니다. 또한 Certbot이라는 자동화 클라이언트를 제공하여 Apache 및 nginx에서 인증서를 획득하고, 설치하는 전체 프로세스가 자동화 되어있습니다.

참고로 Let's Encrypt 인증서의 경우 유효기간은 3개월(90일)로 기간이 짧습니다. 가장 큰 이유로는 짧은 주기의 자동 갱신을 권장하여 인증서가 무력화되더라도 그 피해를 최소화하기 위함이라고 합니다 !

 

인증서 설치하기

Certbot 설치하기

Certbot을 설치하고 nginx 연동을 위해 puthon2-chertbot-nginx도 설치합니다 !

// certbot 설치하기
$ sudo apt install certbot

// 웹서버(nginx) 플러그인 설치하기
$ sudo apt install certbot python3-certbot-nginx

 

nginx 중지하기

현재 구동되고 있는 웹 서비스를 잠시 중단하고 진행해야됩니다 !

$ sudo systemctl stop nginx

 

인증서 생성 및 발급하기

아래의 명령어를 통해 인증서를 설치할 수 있습니다 ! -d 인자 뒤에는 지정할 도메인을 입력해주면 됩니다 !

$ sudo certbot certonly --standalone -d yourdomain.com

 

 

인증서 발급을 요청했을 때 몇가지 확인 사항들이 나옵니다 !

1. 도메인 관리자의 이메일 주소를 입력합니다. 해당 메일을 통해 갱신 알림과 주요 소식들이 발송됩니다.

2. 이용에 관한 동의 및 인증 기관에 등록되는 사항에 관한 동의입니다 !

3. 제 3자 정보제공에 관한 동의입니다 (N 입력)

 

* 내용을 꼭 확인해보시고 다른 내용이 나왔을 경우 알맞게 대응하시면됩니다 !

 

인증서 발급 내역 조회하기

발급된 인증서의 세부적인 정보를 확인하려면 아래 명령어를 통해 확인할 수 있습니다 :)

$ sudo certbot certificates

 

nginx 환경설정

마지막으로 발급된 인증서를 통해 nginx에 설정을 해주어야 정상적으로 적용이되겠죠 !?

아래의 정보는 제 기준으로 작성되었고 참고해서 작성해주시면 됩니다 !

server {
        if ($host = yourdomain) {
                return 301 https://$host$request_uri;
        }
        listen 80;
        server_name yourdomain;
        location / {
                root /usr/local/my-app/build;
                index index.html index.htm;
                try_files $uri $uri/ index.html;
        }
        return 404;
}


server {
        server_name yourdomain;
        listen 443 ssl http2;
        server_name yourdomain www.yourdomain;
        location / {
                root /usr/local/my-app/build;
                index index.html index.htm;
                try_files $uri $uri/ index.html;
        }
        ssl_certificate /etc/letsencrypt/live/yourdomain/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/yourdomain/privkey.pem;
}

 

설정을 마무리한 뒤 nginx을 실행 시켜주는거 잊으시면 안됩니다 !

$ systemctl start nginx

 

인증서 자동 갱신하기

인증서의 유효기간은 90일이기 때문에 만료 전 갱신이 필요합니다 !

아래 명령어를 통해 해당 문구를 크론탭 제일 마지막 줄에서 엔터 후 입력하시면됩니다.

$ sudo crontab -e

// 매달 1일 자정에 갱신 시도, 갱신 후 nginx 재시작
0 0 1 * * certbot renew --renew-hook="sudo systemctl restart nginx"
// 인증서 갱신 테스트
$ sudo certbot renew --dry-run
// 인증서 갱신
$ sudo certbot renew
// 인증서 만료일 확인
$ sudo certbot certificates