카테고리 없음

인증서 발급부터 자동 갱신 설정까지

에이스28 2024. 12. 15. 22:52

SSL 인증서는 웹사이트의 보안을 강화하고 사용자 데이터 보호를 위해 필수적인 요소입니다. 캔버스 인증서를 발급받고, 유효기간을 확인하고, 갱신 및 자동 갱신을 설정하는 방법을 단계별로 정리하겠습니다.


1.인증서 발급

1.1. Let’s Encrypt 사용하여 무료 인증서 발급

Let’s Encrypt는 무료로 SSL 인증서를 발급해주는 서비스입니다. Certbot이라는 도구를 사용하여 인증서를 간단히 발급받을 수 있습니다.

  1. Certbot 설치
    • Ubuntu 기반:
      sudo apt update
      sudo apt install certbot python3-certbot-nginx
    • CentOS 기반:
      sudo yum install certbot python3-certbot-nginx
  2. 인증서 발급
    아래 명령어로 캔버스 도메인에 대해 인증서를 발급받습니다.
  3. sudo certbot --nginx -d canvas.example.com
  4. 자동 Nginx 구성
    • Certbot은 인증서를 발급받으면 Nginx 구성 파일을 자동으로 업데이트하여 HTTPS를 활성화합니다.

1.2. 인증서 발급 시 입력 정보

SSL 인증서 발급 과정에서 다음 정보를 입력해야 합니다:

  • Country Name (2 letter code): 국가 코드 (예: 한국은 KR).
  • State or Province Name: 주 또는 도 이름 (예: Seoul).
  • Locality Name (eg, city): 도시 이름 (예: Seoul).
  • Organization Name (eg, company): 회사 이름 또는 조직명 (예: Canvas Inc.).
  • Organizational Unit Name (eg, section): 부서 이름 (예: IT Department).
  • Common Name (eg, fully qualified host name): 도메인 이름 (예: canvas.example.com 또는 localhost).
  • Email Address: 인증서 관련 알림을 받을 이메일 주소.

입력된 정보는 인증서에 포함되어 브라우저와의 SSL 통신에서 사용됩니다.


2. 인증서 유효기간 확인

Let’s Encrypt 인증서는 기본적으로 90일 동안 유효합니다. 인증서의 유효기간을 확인하려면 OpenSSL을 사용합니다.

  1. 명령어 실행:
  2. openssl x509 -in /etc/letsencrypt/live/canvas.example.com/cert.pem -noout -dates
  3. 출력 예시:
    • notAfter는 인증서 만료 날짜를 나타냅니다.
  4. notBefore=Dec 10 00:00:00 2023 GMT notAfter=Mar 10 00:00:00 2024 GMT

3. 인증서 갱신

Let’s Encrypt 인증서는 유효기간이 90일로 짧기 때문에 만료 전에 갱신해야 합니다.

3.1. 수동 갱신

인증서를 수동으로 갱신하려면 다음 명령을 실행합니다:

sudo certbot renew
  • 갱신이 성공하면 기존 인증서를 대체하고, Nginx 또는 Apache를 자동으로 다시 로드합니다.

3.2. 갱신 확인

갱신 후 인증서가 제대로 적용되었는지 확인하려면 다음 명령을 사용하세요:

openssl x509 -in /etc/letsencrypt/live/canvas.example.com/cert.pem -noout -dates

4. 인증서 자동 갱신 설정

Let’s Encrypt 인증서는 Certbot을 사용하면 자동 갱신을 설정할 수 있습니다.

4.1. Certbot 자동 갱신 확인

Certbot은 기본적으로 cron 작업 또는 systemd 타이머로 자동 갱신이 설정됩니다.

  1. 자동 갱신 상태 확인:
  2. sudo systemctl list-timers | grep certbot
  3. 자동 갱신 스크립트 실행 확인:
    • --dry-run은 실제 갱신 없이 시뮬레이션합니다.
    • 문제가 없다면 자동 갱신이 제대로 설정된 것입니다.
  4. sudo certbot renew --dry-run

4.2. Cron으로 수동 자동 갱신 설정

만약 자동 갱신이 설정되지 않았다면 cron 작업을 추가합니다:

  1. crontab 열기:
  2. sudo crontab -e
  3. 갱신 작업 추가:
    • 매일 자정에 인증서를 갱신하고 Nginx를 다시 로드합니다.
  4. 0 0 * * * certbot renew --quiet && systemctl reload nginx

5. FastAPI에서 SSL 인증서 사용

FastAPI에서 Let’s Encrypt 인증서를 사용하는 경우, uvicorn의 SSL 설정을 통해 HTTPS를 활성화할 수 있습니다.

5.1. 인증서 파일 경로 설정

Let’s Encrypt 인증서를 FastAPI 서버에 적용하려면, 인증서 파일 경로를 지정해야 합니다:

import uvicorn

if __name__ == "__main__":
    uvicorn.run(
        "app:app",  # FastAPI 앱 모듈 경로
        host="0.0.0.0",
        port=443,  # HTTPS 포트
        ssl_keyfile="/etc/letsencrypt/live/canvas.example.com/privkey.pem",
        ssl_certfile="/etc/letsencrypt/live/canvas.example.com/fullchain.pem"
    )

5.2. 개발 환경과 운영 환경 분리

환경에 따라 SSL 사용 여부를 분리하려면 환경 변수를 사용합니다:

import os
import uvicorn

if __name__ == "__main__":
    env = os.getenv("ENV", "development")

    if env == "production":
        uvicorn.run(
            "app:app",
            host="0.0.0.0",
            port=443,
            ssl_keyfile="/etc/letsencrypt/live/canvas.example.com/privkey.pem",
            ssl_certfile="/etc/letsencrypt/live/canvas.example.com/fullchain.pem"
        )
    else:
        uvicorn.run(
            "app:app",
            host="127.0.0.1",
            port=8000,
            reload=True
        )

6. 추가 보안 및 테스트

6.1. 인증서 테스트

인증서가 제대로 작동하는지 확인하려면 다음을 사용합니다:

6.2. 자동 갱신 알림 설정

만료 알림을 받고 싶다면 Certbot의 알림 기능을 설정하거나, 자체적으로 스크립트를 작성하여 이메일 알림을 받을 수 있습니다:

certbot renew --dry-run || echo "Certbot 갱신 실패" | mail -s "Certbot 갱신 알림" admin@example.com

결론

캔버스 도메인에 SSL 인증서를 발급하고 갱신 및 자동 갱신을 설정하는 것은 웹사이트의 보안을 유지하는 데 필수적입니다. Let’s Encrypt와 Certbot을 사용하면 무료로 간단하게 설정할 수 있습니다. 또한, FastAPI와 같은 프레임워크에서도 SSL을 쉽게 적용할 수 있으므로, 환경에 따라 유연하게 관리하세요. 인증서를 정기적으로 점검하고 자동 갱신이 제대로 작동하는지 확인하여 보안상의 문제를 예방하세요.

반응형