DevOps 환경에서 보안은 매우 중요한 요소입니다. 특히 웹 서비스를 운영할 때 SSL(Secure Socket Layer) 설정은 필수적입니다. 이 글에서는 Nginx를 활용하여 SSL 인증서를 설정하고 최적화하는 방법을 단계별로 설명하겠습니다.

1. Nginx 설치

먼저, Nginx가 설치되어 있지 않다면 아래 명령어로 설치합니다.

sudo apt update
sudo apt install nginx

설치가 완료되면 Nginx 서비스를 시작하고, 부팅 시 자동으로 시작되도록 설정합니다.

sudo systemctl start nginx
sudo systemctl enable nginx

2. SSL 인증서 발급

SSL 인증서를 발급받기 위해 Let's Encrypt를 이용하겠습니다. Certbot을 설치하여 SSL 인증서를 자동으로 발급받고 갱신할 수 있습니다.

sudo apt install certbot python3-certbot-nginx

그 다음, 아래 명령어를 사용하여 도메인에 대한 SSL 인증서를 발급받습니다.

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

위 명령어에서 yourdomain.com을 실제 도메인으로 변경하여 실행합니다. 인증서 발급이 완료되면, Nginx 설정이 자동으로 업데이트됩니다.

3. Nginx SSL 설정

SSL 설정이 완료되면, Nginx의 설정 파일을 수정하여 SSL 관련 설정을 추가합니다. /etc/nginx/sites-available/default 파일을 열어 아래와 같이 수정합니다.

server {
    listen 443 ssl;
    server_name yourdomain.com www.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;

    location / {
        try_files $uri $uri/ =404;
    }
}

이 설정은 HTTPS를 통해 연결하고, SSL 인증서와 키의 경로를 지정합니다. 또한, 최신의 안전한 프로토콜과 암호화 방식을 사용하도록 설정합니다.

4. HTTP에서 HTTPS로 리디렉션

사용자가 HTTP로 접속할 경우 HTTPS로 리디렉션되도록 설정할 수 있습니다. 아래와 같이 추가합니다.

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$host$request_uri;
}

이제 사용자가 HTTP로 접근할 경우 자동으로 HTTPS로 리디렉션됩니다.

5. Nginx 설정 테스트 및 재시작

모든 설정이 완료되면, Nginx 설정을 테스트하고 서비스를 재시작합니다.

sudo nginx -t
sudo systemctl restart nginx

6. SSL 최적화

SSL 설정 최적화를 위해 추가적인 보안 헤더를 설정할 수 있습니다. 다음 설정을 server 블록에 추가합니다.

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
add_header X-XSS-Protection "1; mode=block";

이 헤더들은 브라우저가 보안 위험을 감지했을 때 적절히 대응할 수 있도록 돕습니다.

7. 자동 갱신 설정

Let's Encrypt 인증서는 90일간 유효하므로, 인증서가 만료되지 않도록 자동 갱신을 설정합니다. 아래 명령어로 cron 작업을 추가합니다.

echo "0 3   * /usr/bin/certbot renew --quiet" | sudo tee -a /etc/crontab

이렇게 하면 매일 새벽 3시에 Certbot이 인증서를 자동으로 갱신합니다.

마무리

이 글에서는 Nginx를 활용한 SSL 설정 및 최적화 방법에 대해 알아보았습니다. SSL 인증서를 발급받고, Nginx 설정을 통해 HTTPS를 활성화하며 보안을 강화하는 다양한 방법을 구현했습니다. 이러한 설정은 웹 서비스의 신뢰성을 높이고 데이터 전송의 안전성을 보장하는 데 매우 중요한 역할을 합니다. 앞으로도 지속적으로 보안을 강화하고 최적화하는 노력을 기울이시기 바랍니다.