HTTPS 적용을 위한 Certbot 사용 가이드: 다양한 시나리오와 해결 방법 | 세상의 모든 정보

HTTPS 적용을 위한 Certbot 사용 가이드: 다양한 시나리오와 해결 방법

Certbot은 Let's Encrypt를 통해 무료 SSL/TLS 인증서를 발급받고 관리하는 과정을 자동화해주는 강력한 도구입니다. 이 가이드에서는 Certbot을 사용하여 HTTPS를 적용할 때 마주칠 수 있는 다양한 상황별 시나리오와 그에 대한 해결 방법을 상세히 다룹니다. 서버 환경, 웹 서버 종류, 그리고 특정 요구사항에 맞춰 가장 적합한 방법을 찾아 안전한 HTTPS 연결을 구축하세요.


1. 기본 Certbot 설치 및 Nginx 연동

가장 일반적인 시나리오로, Nginx 웹 서버에 SSL 인증서를 적용하는 방법입니다. Certbot은 Nginx 설정을 자동으로 수정하여 인증서 발급과 적용을 한 번에 처리합니다.


# Certbot 및 Nginx용 플러그인 설치
sudo apt update
sudo apt install certbot python3-certbot-nginx

# Certbot 실행 (도메인 이름을 your_domain.com으로 변경하세요)
sudo certbot --nginx -d your_domain.com -d www.your_domain.com
            
위 명령어는 Nginx 설정을 자동으로 분석하고, Let's Encrypt를 통해 인증서를 발급받은 후, HTTPS로 리디렉션하는 설정을 추가해줍니다.

2. 다양한 인증 방식 활용하기

2.1. Standalone 모드: 웹 서버를 잠시 중단해야 할 때

웹 서버가 실행 중이지 않거나, 포트 80을 직접 점유하여 인증을 진행하고 싶을 때 사용합니다. Certbot이 자체적으로 웹 서버를 실행해 Let's Encrypt 챌린지에 응답합니다.


# 웹 서버를 잠시 중지해야 함 (예: sudo systemctl stop nginx)
sudo certbot certonly --standalone -d your_domain.com
# 인증서 발급 후 웹 서버 재시작
            

2.2. Webroot 플러그인: 웹 서버 설정 변경 없이

현재 웹 서버 설정을 변경하지 않고 인증을 수행하려면 Webroot 플러그인을 사용하세요. 웹 서버의 루트 디렉터리(DocumentRoot)를 지정해주면 Certbot이 해당 위치에 챌린지 파일을 생성합니다.


# -w 옵션에 웹 서버의 실제 루트 디렉터리 경로를 지정
sudo certbot certonly --webroot -w /var/www/html -d your_domain.com
            

2.3. DNS 챌린지: 와일드카드 인증서 발급

DNS 챌린지를 사용하면 *.example.com과 같은 **와일드카드 인증서**를 발급받을 수 있습니다. 이 방식은 특정 도메인에 대한 DNS 레코드를 수동으로 추가해야 합니다.


# DNS 챌린지 모드로 Certbot 실행
sudo certbot certonly --manual --preferred-challenges=dns -d *.your_domain.com -d your_domain.com
            
위 명령어를 실행하면 Certbot이 TXT 레코드를 생성하라는 메시지를 출력합니다. 사용자는 해당 내용을 DNS 설정에 추가하고, Certbot의 확인 절차를 거쳐야 인증서가 발급됩니다.

3. 인증서 관리 및 자동 갱신

Let's Encrypt 인증서는 90일마다 갱신해야 합니다. Certbot은 이 과정을 자동으로 처리하는 스크립트를 제공합니다.


# 갱신이 제대로 작동하는지 테스트
sudo certbot renew --dry-run

# 대부분의 시스템에 이미 cron job 또는 systemd timer로 자동 갱신 설정이 되어 있습니다.
# 수동으로 설정하려면 아래와 같이 cron job에 추가할 수 있습니다.
# 매일 0시와 12시에 갱신 시도 (-q 옵션은 갱신 성공 시 메시지를 출력하지 않음)
echo "0 0,12 * * * root certbot renew -q" | sudo tee -a /etc/crontab > /dev/null
            

4. Nginx HTTPS 설정 예시

Certbot이 자동으로 설정해주지만, 수동으로 Nginx 설정을 검토하거나 수정해야 할 때 참고할 수 있는 예시입니다.


# HTTP 접속을 HTTPS로 자동 리디렉션
server {
    listen 80;
    server_name your_domain.com www.your_domain.com;
    return 301 https://$server_name$request_uri;
}

# HTTPS 접속 설정
server {
    listen 443 ssl http2;
    server_name your_domain.com www.your_domain.com;

    # Certbot이 발급한 인증서 경로
    ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;

    # 보안을 위한 추가 SSL 설정
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
    ssl_prefer_server_ciphers on;

    # HSTS(HTTP Strict Transport Security) 설정
    add_header Strict-Transport-Security "max-age=31536000" always;

    # ... 기타 서버 설정
}
            

5. 문제 해결: 포트 80 사용 중 오류

Certbot의 --standalone 모드를 사용할 때 포트 80이 다른 프로세스에 의해 이미 점유되어 발생하는 오류입니다. 이 경우, 해당 프로세스를 일시적으로 중지하고 Certbot을 실행하면 됩니다.


# 포트 80을 사용하는 프로세스 확인 및 강제 종료
sudo lsof -i :80 # 먼저 확인
sudo fuser -k 80/tcp # 강제 종료

# Certbot 재실행
sudo certbot certonly --standalone -d your_domain.com

# 인증서 발급 후 원래 프로세스 재시작
            

6. Docker 환경에서의 Certbot 사용

Docker를 사용하는 경우, Nginx 컨테이너와 Certbot 컨테이너를 분리하여 인증서를 발급하고 공유하는 것이 일반적인 패턴입니다. 아래는 docker-compose.yml 파일의 예시입니다.


version: '3.7'
services:
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./certbot/conf:/etc/letsencrypt
      - ./certbot/www:/var/www/certbot
    command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
  certbot:
    image: certbot/certbot
    volumes:
      - ./certbot/conf:/etc/letsencrypt
      - ./certbot/www:/var/www/certbot
    command: certonly --webroot -w /var/www/certbot --force-renewal --email youremail@example.com -d your_domain.com -d www.your_domain.com --agree-tos
            

Certbot을 사용하면 HTTPS 적용이 훨씬 간편해집니다. 이 가이드를 통해 여러분의 서버 환경에 맞는 최적의 방법을 선택하여 안전한 웹 서비스를 구축하시길 바랍니다. 🚀

다음 이전

POST ADS1

POST ADS 2