무료 SSL 인증서 발급: 여러 파이썬 버전 사용 시 특정 버전으로 Certbot 실행하기

SSLCertbotLet's EncryptPythonNginx서버관리

웹사이트에 HTTPS를 적용하려면 SSL 인증서가 필요합니다. Let's Encrypt는 무료로 SSL 인증서를 제공하는 인증 기관(CA)으로, Certbot을 통해 쉽게 인증서를 발급받을 수 있습니다.

하지만 시스템에 여러 파이썬 버전이 설치되어 있을 때, Certbot이 잘못된 파이썬 버전을 사용하면 오류가 발생할 수 있습니다. 이 글에서는 특정 파이썬 버전을 지정하여 Certbot을 실행하는 방법을 설명합니다.

문제 상황

시스템에 파이썬 3.8, 3.9, 3.10 등 여러 버전이 설치되어 있고, 기본 certbot 명령어가 예상과 다른 파이썬 버전을 사용하는 경우가 있습니다.

# 기본 certbot 실행 시
certbot --nginx -d domain.com -d www.domain.com
# 오류 발생: Python version mismatch 또는 dependency 문제

해결 방법: 특정 파이썬 버전으로 Certbot 실행

1. Certbot이 설치된 위치 확인

먼저 Certbot이 어디에 설치되어 있는지 확인합니다.

which certbot
# 예: /usr/bin/certbot

2. Certbot의 실제 파이썬 경로 확인

Certbot 스크립트의 첫 줄(shebang)을 확인하여 어떤 파이썬을 사용하는지 봅니다.

head -1 /usr/bin/certbot
# 예: #!/usr/bin/python3 또는 #!/usr/bin/env python3

3. 특정 파이썬 버전으로 직접 실행

특정 파이썬 버전(예: Python 3.10)을 사용하여 Certbot을 실행합니다.

sudo python3.10 /usr/bin/certbot --version

이 명령어로 Certbot이 정상적으로 작동하는지 확인합니다.

4. SSL 인증서 발급

특정 파이썬 버전으로 Certbot을 실행하여 SSL 인증서를 발급받습니다.

sudo python3.10 /usr/bin/certbot --nginx -d domain.com -d www.domain.com

명령어 설명:

  • sudo: 관리자 권한 필요
  • python3.10: Python 3.10 버전 사용
  • /usr/bin/certbot: Certbot 실행 파일 경로
  • --nginx: Nginx 웹서버 사용
  • -d domain.com: 도메인 지정 (여러 개 지정 가능)
  • -d www.domain.com: www 서브도메인도 포함

5. 인증서 발급 과정

Certbot이 실행되면 다음 과정을 거칩니다:

  1. 이메일 입력: 인증서 만료 알림을 받을 이메일 주소
  2. 약관 동의: Let's Encrypt 서비스 약관 동의
  3. 도메인 검증: 도메인 소유권 확인 (HTTP-01 또는 DNS-01 챌린지)
  4. 인증서 발급: 검증 완료 후 인증서 발급
  5. Nginx 설정 자동 업데이트: Certbot이 Nginx 설정 파일을 자동으로 수정하여 HTTPS 적용

추가 옵션

자동 갱신 설정

SSL 인증서는 90일마다 갱신해야 합니다. 자동 갱신을 위해 cron 작업을 추가합니다.

# Certbot 자동 갱신 테스트
sudo python3.10 /usr/bin/certbot renew --dry-run

# Cron 작업 추가 (매일 오전 2시에 갱신 확인)
sudo crontab -e
# 다음 줄 추가:
0 2 * * * /usr/bin/python3.10 /usr/bin/certbot renew --quiet

특정 파이썬 버전을 기본값으로 설정

매번 python3.10을 입력하는 것이 번거롭다면, 별칭(alias)을 만들 수 있습니다.

# ~/.bashrc 또는 ~/.zshrc에 추가
alias certbot-py310='sudo python3.10 /usr/bin/certbot'

# 사용
certbot-py310 --nginx -d domain.com -d www.domain.com

주의사항

  1. 도메인 DNS 설정: 도메인이 서버 IP로 올바르게 설정되어 있어야 합니다.
  2. 포트 80/443 열기: HTTP(80)와 HTTPS(443) 포트가 열려있어야 합니다.
  3. Nginx 실행 중: Certbot이 Nginx 설정을 수정하므로 Nginx가 실행 중이어야 합니다.
  4. 도메인 접근 가능: 도메인으로 웹사이트에 접근할 수 있어야 Let's Encrypt가 검증할 수 있습니다.

문제 해결

오류: "No module named 'certbot'"

특정 파이썬 버전에 Certbot이 설치되어 있지 않은 경우:

# 해당 파이썬 버전으로 pip 설치
python3.10 -m pip install certbot certbot-nginx

# 또는 시스템 패키지 매니저 사용
sudo apt-get install python3.10-certbot python3.10-certbot-nginx

오류: "nginx: command not found"

Nginx가 설치되어 있지 않은 경우:

sudo apt-get update
sudo apt-get install nginx

인증서 발급 실패

  • 도메인 DNS가 올바르게 설정되었는지 확인
  • 방화벽에서 포트 80, 443이 열려있는지 확인
  • Nginx가 정상적으로 실행 중인지 확인

결론

여러 파이썬 버전이 설치된 환경에서도 특정 파이썬 버전을 지정하여 Certbot을 실행할 수 있습니다. python3.10 /usr/bin/certbot 형식으로 실행하면 원하는 파이썬 버전을 사용할 수 있습니다.

Let's Encrypt를 통해 무료로 SSL 인증서를 발급받아 웹사이트에 HTTPS를 적용하세요!

참고 자료

궁금한 점이 있으신가요?

문의사항이 있으시면 언제든지 연락주세요.