Python/Backend

FastAPI 서버를 HTTPS로 실행하는 방법

jimmy_AI 2024. 12. 1. 16:00
반응형

안녕하세요.

FastAPI로 서버를 실행할 때, http가 아닌 보안이 추가된 https 프로토콜로

서버를 실행할 수 있는 방법을 간략하게 정리해보도록 하겠습니다.

 

 

1. SSL 인증서 발급

먼저, https로 서버를 실행하기 위해서는 ssl 인증서가 필요합니다.

ssl 인증서는 openssl, mkcert, certbot, AWS Certificate Manager 등

다양한 방법으로 발급받을 수 있는데요.

이 중 어떤 방법으로 발급받던 HTTPS 프로토콜 적용은 가능합니다.

 

다만, 보안 및 원활한 실행을 위하여 self-signed 인증서보다는

도메인 주소와 연결된 ssl 인증서를 발급받기를 권장드립니다.

 

여기서는 mkcert를 통해서 인증서를 발급받는 명령어의 예시를 다뤄보도록 하겠습니다.

이렇게 발급 받은 인증서는 self-signed 인증서라 배포용보다는 테스트용으로 적합합니다.

참고로, 해당 명령어는 리눅스를 기준으로 작성되었습니다.

# 1. mkcert 설치
sudo apt install libnss3-tools
wget -q https://dl.filippo.io/mkcert/latest?for=linux/amd64 -O mkcert
chmod +x mkcert
sudo mv mkcert /usr/local/bin/

# 2. mkcert ssl 인증서 발급
mkcert -install
mkcert <IP 주소> localhost

# 3. 결과 확인 예시
127.0.0.1+1-key.pem -> keyfile
127.0.0.1+1.pem -> certfile

 

 

2. FastAPI 서버를 HTTPS로 실행

이제 ssl 인증서가 발급되었다면 FastAPI 서버에서 이 파일들을 지정해주시면

http가 아닌 https로 실행이 완료됩니다.

 

uvicorn으로 https 서버를 실행하는 예시 명령어는 다음과 같습니다.

참고로, 포트 번호는 https 기본 포트인 443 포트로 실행하는 것을 권장하며,

--ssl-keyfile 및 --ssl-certfile은 인증서 파일이 저장된 디렉토리를 각각 지정해주시면 됩니다.

uvicorn main:app --host 0.0.0.0 --port 443 \
    --ssl-keyfile ./127.0.0.1+1-key.pem \ # 인증서 파일이 저장된 디렉토리를 지정
    --ssl-certfile ./127.0.0.1+1.pem

 

이 글에서 다루어졌던 내용은 정식 배포용보다는 테스트용 https 적용 방법에 가깝지만

그래도 이 글이 서버 배포 과정에 도움이 되셨기를 기원해봅니다.

 

다음 번에 기회가 된다면 정식 배포용 서버를 배포하는 적절한 방법에 대한

포스팅을 작성해보도록 하겠습니다. 잘 봐주셔서 감사드립니다.