인증서 발급부터 자동 갱신 설정까지
SSL 인증서는 웹사이트의 보안을 강화하고 사용자 데이터 보호를 위해 필수적인 요소입니다. 캔버스 인증서를 발급받고, 유효기간을 확인하고, 갱신 및 자동 갱신을 설정하는 방법을 단계별로 정리하겠습니다.
1.인증서 발급
1.1. Let’s Encrypt 사용하여 무료 인증서 발급
Let’s Encrypt는 무료로 SSL 인증서를 발급해주는 서비스입니다. Certbot이라는 도구를 사용하여 인증서를 간단히 발급받을 수 있습니다.
- Certbot 설치
- Ubuntu 기반:
sudo apt update sudo apt install certbot python3-certbot-nginx
- CentOS 기반:
sudo yum install certbot python3-certbot-nginx
- Ubuntu 기반:
- 인증서 발급
아래 명령어로 캔버스 도메인에 대해 인증서를 발급받습니다. sudo certbot --nginx -d canvas.example.com
- 자동 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을 사용합니다.
- 명령어 실행:
openssl x509 -in /etc/letsencrypt/live/canvas.example.com/cert.pem -noout -dates
- 출력 예시:
notAfter
는 인증서 만료 날짜를 나타냅니다.
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
타이머로 자동 갱신이 설정됩니다.
- 자동 갱신 상태 확인:
sudo systemctl list-timers | grep certbot
- 자동 갱신 스크립트 실행 확인:
--dry-run
은 실제 갱신 없이 시뮬레이션합니다.- 문제가 없다면 자동 갱신이 제대로 설정된 것입니다.
sudo certbot renew --dry-run
4.2. Cron으로 수동 자동 갱신 설정
만약 자동 갱신이 설정되지 않았다면 cron
작업을 추가합니다:
- crontab 열기:
sudo crontab -e
- 갱신 작업 추가:
- 매일 자정에 인증서를 갱신하고 Nginx를 다시 로드합니다.
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. 인증서 테스트
인증서가 제대로 작동하는지 확인하려면 다음을 사용합니다:
- SSL Labs 테스트: 인증서의 강도 및 설정 확인.
6.2. 자동 갱신 알림 설정
만료 알림을 받고 싶다면 Certbot의 알림 기능을 설정하거나, 자체적으로 스크립트를 작성하여 이메일 알림을 받을 수 있습니다:
certbot renew --dry-run || echo "Certbot 갱신 실패" | mail -s "Certbot 갱신 알림" admin@example.com
결론
캔버스 도메인에 SSL 인증서를 발급하고 갱신 및 자동 갱신을 설정하는 것은 웹사이트의 보안을 유지하는 데 필수적입니다. Let’s Encrypt와 Certbot을 사용하면 무료로 간단하게 설정할 수 있습니다. 또한, FastAPI와 같은 프레임워크에서도 SSL을 쉽게 적용할 수 있으므로, 환경에 따라 유연하게 관리하세요. 인증서를 정기적으로 점검하고 자동 갱신이 제대로 작동하는지 확인하여 보안상의 문제를 예방하세요.