브라우저 주소창에 ‘안전하지 않음(Not Secure)’ 경고가 떠 있는 웹사이트를 본 적 있을 겁니다. 이 경고가 뜨면 방문자의 절반이 뒤로가기를 누릅니다. 신뢰가 0이 되는 순간입니다. 다행히 HTTPS 적용은 돈이 들지 않습니다. Let’s Encrypt에서 무료로 SSL 인증서를 발급해 주고, Certbot이라는 도구가 설치에서 갱신까지 전부 자동화해 줍니다. 3분이면 끝납니다.
HTTPS가 없으면 어떻게 되나
HTTP로 통신하는 웹사이트는 모든 데이터가 평문으로 전송됩니다. 비밀번호, 신용카드 번호, 개인정보가 암호화 없이 인터넷을 타고 흘러갑니다. 중간에 패킷을 가로채는 사람이 있으면 그대로 노출됩니다. 공공 와이파이에서 로그인하는 순간, 같은 네트워크에 있는 누군가가 내 정보를 읽을 수 있습니다.
2018년부터 Chrome, Firefox 등 주요 브라우저가 HTTP 사이트에 ‘안전하지 않음’ 경고를 표시하기 시작했습니다. 2026년 현재, HTTP 사이트는 브라우저에서 경고 페이지를 띄우거나 접속 자체를 막는 경우도 있습니다. SEO에도 악영향입니다. Google은 HTTPS를 랭킹 신호로 사용합니다. HTTP 사이트는 검색 결과에서 밀려납니다.
방문자 신뢰, 보안, SEO. 세 가지를 전부 잃는 게 HTTP 사이트입니다. 근데 Let’s Encrypt 때문에 비용 핑계는 더 이상 안 통합니다. UFW 방화벽 설정과 함께 VPS 보안의 양대 축입니다.
Let’s Encrypt가 뭔가
Let’s Encrypt는 무료 SSL/TLS 인증서를 발급하는 비영리 인증기관(CA)입니다. 2016년 서비스를 시작했고, 현재 전 세계 수억 개 웹사이트가 사용합니다. 도메인 소유권만 증명하면 누구나 무료로 인증서를 받을 수 있습니다.
인증서 유효기간은 90일입니다. 짧아 보이지만, 자동 갱신을 설정하면 오히려 더 안전합니다. 인증서가 탈취되어도 90일 뒤에는 만료되니 피해 기간이 짧습니다. 유료 인증서가 보통 1년 단위인 것과 대비됩니다.
Certbot은 이 발급 과정을 자동화하는 도구입니다. ‘인증서? 내가 알아서 발급하고, 갱신도 알아서 할게. 넌 쟤냐’라고 하는 성실한 비서 같습니다. 명령 한 줄이면 Nginx 설정까지 자동으로 바꿔줍니다.
Certbot 설치 + SSL 발급 — 3분 컷
먼저 Certbot과 Nginx 플러그인을 설치합니다.
# Certbot + Nginx 플러그인 설치
sudo apt update
sudo apt install certbot python3-certbot-nginx
다음으로 Nginx 설정 파일에 도메인이 들어가 있어야 합니다. /etc/nginx/sites-available/에 있는 설정 파일의 server_name에 도메인을 적어둡니다. Certbot이 이걸 읽고 자동으로 인식합니다. Nginx reverse proxy를 쓰고 있다면 그 설정 파일에 도메인이 들어가 있으면 됩니다.
# /etc/nginx/sites-available/default 에서
server {
server_name example.com www.example.com;
...
}
이제 SSL을 발급받습니다. 명령 한 줄입니다.
# Nginx용 SSL 발급 (자동 설정)
sudo certbot --nginx -d example.com -d www.example.com
# 진행 과정:
# 1. 이메일 입력 (만료 알림용)
# 2. 이용약관 동의
# 3. HTTP를 HTTPS로 리다이렉트할지 묻는 질문 → 2(리다이렉트) 선택
# 4. Nginx 설정 자동 수정 + 재시작
# 완료
리다이렉트를 선택하면 HTTP로 들어온 방문자가 자동으로 HTTPS로 넘어갑니다. 기존 링크가 http://로 걸려 있어도 문제없습니다. Certbot이 Nginx 설정에 301 리다이렉트 규칙을 자동으로 추가합니다.
완료되면 브라우저에서 https://example.com으로 접속해 보세요. 자물쇠 아이콘이 떠야 합니다. ‘안전하지 않음’ 경고가 사라졌는지 확인하세요.
여러 도메인 인증서 한 번에 발급하기
VPS 하나에 여러 도메인이나 서브도메인을 연결하는 경우가 많습니다. blog.example.com, api.example.com, app.example.com처럼 여러 서브도메인을 운영한다면, -d 옵션을 나열해서 한 번에 발급할 수 있습니다.
# 여러 도메인/서브도메인을 한 인증서로
sudo certbot --nginx \
-d example.com \
-d www.example.com \
-d blog.example.com \
-d api.example.com
# 발급된 인증서 확인
sudo certbot certificates
# 출력 예시:
# Domains: example.com www.example.com blog.example.com api.example.com
# Expiry Date: 2026-10-11 (valid: 89 days)
# Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem
인증서 하나에 도메인이 여러 개 묶여 있는 형태를 SAN(Subject Alternative Name) 인증서라고 합니다. 무료이고 갱신도 한 번에 처리됩니다. docker compose로 여러 서비스를 운영 중이라면 이 방법으로 관리가 깔끔해집니다.
자동 갱신 — 설정 한 번이면 끝
인증서 유효기간이 90일이니 갱신을 자동화해야 합니다. 다행히 Certbot을 설치하면 자동으로 systemd 타이머가 등록됩니다. 하루에 두 번 체크해서 만료 30일 전에 자동 갱신합니다.
# 자동 갱신 타이머 확인
sudo systemctl list-timers | grep certbot
# 갱신 테스트 (실제 갱신은 안 함, dry-run)
sudo certbot renew --dry-run
# Congratulations 메시지가 나오면 정상
dry-run이 성공하면 갱신은 자동으로 됩니다. 따로 건드릴 게 없습니다. 갱신 후 Nginx를 다시 불러오도록 deploy hook을 설정하면 더 완벽합니다.
# 갱신 후 자동으로 Nginx reload
sudo certbot renew --deploy-hook "systemctl reload nginx"
# 또는 /etc/letsencrypt/renewal-hooks/deploy/ 에 스크립트 배치
echo '#!/bin/bash
systemctl reload nginx' | sudo tee /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
주의점: DNS가 먼저
가장 흔한 실패 원인은 DNS 설정입니다. 도메인의 A 레코드가 VPS의 IP 주소를 가리키고 있어야 합니다. DNS가 아직 전파되지 않았거나, 다른 IP를 가리키고 있으면 Certbot이 도메인 소유권을 증명하지 못해 발급이 실패합니다.
발급 명령을 실행하기 전에 dig나 nslookup으로 도메인이 올바른 IP를 가리키는지 확인하세요. DNS 전파는 보통 몇 분에서 최대 48시간입니다. 방금 A 레코드를 바꿨다면 잠시 기다렸다가 시도하세요.
또 한 가지, 80번 포트가 열려 있어야 합니다. Certbot이 HTTP-01 챌린지로 도메인 소유권을 증명하는데, 이때 80번 포트를 사용합니다. 방화벽(UFW)에서 80번과 443번이 허용되어 있는지 확인하세요. UFW 설정은 UFW 방화벽 가이드를 참고하세요.
인증서 만료 후 긴급 복구
자동 갱신이 어떤 이유로 실패해서 인증서가 만료되면, 브라우저에서 접속 자체가 차단됩니다. 이런 상황이 오면 당황하지 말고 아래 순서로 복구합니다.
# 1. 현재 인증서 상태 확인
sudo certbot certificates
# 2. 강제 갱신 시도
sudo certbot renew --force-renewal
# 3. 여전히 실패하면 로그 확인
sudo tail -50 /var/log/letsencrypt/letsencrypt.log
# 4. Nginx 설정 문제면 테스트
sudo nginx -t
# 5. 80번 포트가 열려 있는지 확인 (UFW)
sudo ufw status | grep -E "80|443"
가장 흔한 만료 원인은 80번 포트가 막혀 있거나, Nginx 설정이 꼬여 있거나, DNS가 바뀐 경우입니다. 로그를 보면 정확한 원인이 나옵니다. systemctl restart nginx 후 다시 certbot renew를 시도해 보세요.
정리
무료 SSL은 더 이상 핑계거리가 없는 설정입니다. Let’s Encrypt + Certbot이면 3분 만에 HTTPS 전환이 끝납니다. 자동 갱신까지 설정하면 이후에 손댈 게 없습니다. 웹사이트에 ‘안전하지 않음’ 경고가 떠 있다면 오늘 당장 적용하세요. 방문자 신뢰, SEO, 보안 세 마리 토끼를 한 번에 잡을 수 있습니다.
이 글은 VPS 실전 운영 시리즈의 일부입니다. UFW 방화벽 설정으로 포트를 보호하고, 이 글로 HTTPS를 적용했다면, 다음으로는 WireGuard로 자체 VPN 구축하는 방법을 추천합니다. 구독하고 VPS 실전 팁 매주 받아보세요.



















