작은 프로젝트라고 해도 보안을 위해 HTTPS를 사용하는 것이 좋다.
HTTPS를 설정하면 데이터가 암호화되어 전송되므로, 로그인 정보나 중요한 요청이 중간에서 탈취되는 것을 방지할 수 있다.
이번 글에서는 Let’s Encrypt와 Certbot을 이용해 Ubuntu 서버에서 간단하게 HTTPS를 설정하는 방법을 알아보자.
이미 도메인이 서버에 연결되어 있다고 가정하고, 실제 설정에 필요한 부분만 다룬다.
앞선 과정들은 이전 글에서 확인 가능합니다.
도메인 연결하기
[Contabo] 도메인 연결하기: 콘타보 서버에서 프로젝트 운영하기 (feat. Clouldflare)
앞선 글에서 콘타보 인스턴스에 Docker와 프로젝트를 배포하는 과정을 정리했다.이제 다음 단계로 도메인 연결, Nginx 설정, 방화벽 설정을 마무리해보자. 1. 도메인 연결 (Cloudflare) 이미 Cloudflare에
iwillcomplete.tistory.com
우분투 최초 셋팅
[Contabo] 콘타보 우분투 계정 생성과 SSH 접속 환경 설정에 대해서 알아보자.
해보고 싶은 개인 프로젝트가 있어서 AWS 프리티어 및 Oracle 무료 인스턴스를 사용해 봤지만 사양이 넉넉치 않아서 저렴하고 성능 좋은 콘타보 인스턴스를 구매하게 되었다. 최초 로그인은
iwillcomplete.tistory.com
Github Actions + Docker 로 CICD 구현
[Contabo] Github Actions + GHCR + Docker Compose로 CI/CD 구현하기 (Contabo 서버)
이번 글에서는 GitHub Actions, GHCR(GitHub Container Registry), Docker Compose를 이용해 코드 push → 자동 배포까지 연결하는 전체 과정을 정리한다. [Contabo] 콘타보 우분투 계정 생성과 SSH 접속 환경 설정에 대
iwillcomplete.tistory.com
왜 HTTPS를 사용해야 할까?
데이터 보호
HTTP는 평문(plain text)으로 데이터를 주고받기 때문에 중간에 누군가가 패킷을 훔쳐보면 쉽게 정보가 노출될 수 있다.
반면 HTTPS는 데이터를 암호화해서 주고받기 때문에 외부에서 내용을 파악하기 어렵다.
검색 엔진과 브라우저 정책
- 구글은 HTTPS를 사용하는 사이트를 검색 순위에서 우대한다.
- 최근 크롬 등 대부분의 브라우저는 HTTP만 사용하는 사이트에 “안전하지 않음” 경고를 표시한다.
HTTPS 설정 방법
1. Certbot 설치
먼저 인증서를 발급받기 위한 툴인 Certbot을 설치한다.
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
2. Nginx 설정 파일 확인
도메인과 포트 80이 잘 연결되어 있어야 인증서 발급이 가능하다.
아래는 /etc/nginx/sites-available/default 또는 별도의 conf 파일에 들어갈 기본 예시다.
server {
listen 80;
server_name example.com www.example.com;
root /var/www/html;
location / {
try_files $uri $uri/ =404;
}
}
수정 후 테스트 및 적용:
sudo nginx -t
sudo systemctl reload nginx
3. 인증서 발급 및 HTTPS 자동 설정
certbot 명령어 하나로 인증서를 발급받고 Nginx 설정까지 자동으로 해준다.
sudo certbot --nginx -d example.com -d www.example.com
도중에 이메일 입력, 이용 약관 동의, HTTP → HTTPS 리디렉션 여부 등을 묻는다.
리디렉션을 선택하면 모든 트래픽이 자동으로 HTTPS로 전환된다.
4. 자동 갱신 확인
Let’s Encrypt 인증서는 90일 유효기간이 있다.
certbot은 시스템 타이머를 통해 자동 갱신을 수행한다
sudo systemctl list-timers | grep certbot
매일 2번 실행되어 필요한 경우 자동 갱신된다.
HTTPS 접속 테스트
브라우저에서 https://example.com에 접속해 🔒 자물쇠 아이콘이 뜨는지 확인해보자.
이제 평문으로 노출되지 않는 안전한 연결이 적용된 것이다.
(선택 사항) 방화벽 설정
UFW 방화벽을 사용 중이라면, HTTPS(443 포트)도 허용해주어야 한다.
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP' # 기존 HTTP만 허용된 규칙 제거
Let’s Encrypt를 활용하면 복잡한 절차 없이도 무료로 안전한 HTTPS 연결을 설정할 수 있다.
작은 프로젝트일수록 인증서 관리에 신경 쓰기 어려운데, certbot은 자동 갱신 기능도 제공해 한 번 설정해두면 이후 관리도 편리하다.