본문 바로가기
클라우드 서버/AWS

[AWS SSL 인증서] SSL 인증서 발급 (HTTPS), Nginx

by 보안매크로 2024. 6. 23.
728x90

 AWS EC2 인스턴스에서 쉘 액세스 권한이 있는 경우, Certbot ACME 클라이언트를 사용하여 Let's Encrypt SSL 인증서를 발급받고 자동으로 설치하는 것이 좋습니다. Certbot은 SSL 인증서를 자동으로 발급하고 갱신할 수 있는 도구로, 사용하기 쉽고 널리 사용됩니다.

시작전에, 도메인 주소를 웹서버 IP 매칭시켜놔야 합니다! (도메인주소 필요, 저는 DNS 레코드로 A(IP와 1대1 매칭) 선택)

Certbot을 사용하여 Let's Encrypt SSL 인증서 발급 및 설치

AWS EC2 인스턴스에 Certbot을 설치합니다.

1. Certbot 설치:

sudo yum install -y certbot
sudo yum install -y python3-certbot-nginx

도메인 이름을 지정하여 SSL 인증서를 발급받습니다. 예를 들어, fintech19190301.kro.kr 도메인에 대해 SSL 인증서를 발급받으려면 다음 명령어를 실행합니다.

2. Certbot을 사용하여 SSL 인증서 발급:

sudo cerbot --nginx -d 도메인

이 명령어는 Nginx 설정을 자동으로 업데이트하고, SSL 인증서를 구성합니다.

Let's Encrypt 인증서는 90일 동안 유효합니다. 따라서 인증서 갱신을 자동화하기 위해 crontab을 설정할 수 있습니다.

3. 자동 갱신 설정:

sudo crontab -e


다음 줄을 추가하여 매일 새벽 2시에 인증서를 갱신하도록 설정합니다.

0 2 * * * /usr/bin/certbot renew --quiet
 

Nginx 설정 예시

Certbot이 자동으로 Nginx 설정을 업데이트하지만, 수동으로 설정하는 방법도 알아두면 유용합니다. 다음은 기본적인 Nginx 설정 예시입니다:

Nginx 설정 파일 열기

 
sudo nano /etc/nginx/conf.d/your_project.conf

Nginx 설정 추가/수정

 
server {
    listen 80;
    server_name 도메인 www.도메인;

    # 모든 HTTP 요청을 HTTPS로 리다이렉트
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name 도메인 www.도메인;

    ssl_certificate /etc/letsencrypt/live도메인/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/도메인/privkey.pem;

    location / {
        proxy_pass http://unix:/var/www/fintechproject/Server/DjangoServer/DjangoServer.sock;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Nginx 설정 테스트 및 재시작

Nginx 설정 파일을 저장하고 편집기를 종료한 후, Nginx 설정을 테스트하고 재시작합니다.

 
sudo nginx -t sudo systemctl restart nginx

요약

  1. Certbot 설치: Certbot과 Certbot Nginx 플러그인을 설치합니다.
  2. SSL 인증서 발급: Certbot을 사용하여 도메인에 대한 SSL 인증서를 발급받습니다.
  3. 자동 갱신 설정: crontab을 설정하여 SSL 인증서를 자동으로 갱신합니다.
  4. Nginx 설정: Nginx 설정을 통해 SSL 인증서를 구성하고, HTTP 요청을 HTTPS로 리다이렉트합니다.
728x90