Home Knowledge base Skyline Cloud Let's Encrypt로 무료 SSL 설정하는 방법 (자동 갱신) KNOWLEDGE BASE

Let's Encrypt로 무료 SSL 설정하는 방법 (자동 갱신)

Certbot를 사용해 Nginx에서 무료 Let's Encrypt SSL 인증서로 사이트를 보호하고, systemd를 통해 안정적으로 자동 갱신하는 방법을 사우디아라비아에 호스팅된 서버 기준으로 단계별로 정확하게 안내합니다.

Let's Encrypt로 무료 SSL 설정하는 방법 (자동 갱신)

Certbot를 사용해 Nginx에서 무료 Let's Encrypt SSL 인증서로 사이트를 보호하는 정밀한 단계별 가이드입니다. systemd를 통한 안정적인 자동 갱신까지 포함하며, 사우디아라비아에 호스팅된 서버를 기준으로 합니다.

SKYLINE Engineering @skyline

게시일 2026년 6월 9일 | 읽는 시간 6분

Let's Encrypt 무료 SSL을 사용하는 이유

모든 공개 웹사이트에는 HTTPS가 필요합니다. 브라우저는 일반 HTTP 페이지를 "안전하지 않음"으로 표시하고, 검색 엔진은 암호화된 사이트를 선호하며, PDPL에 따른 사우디 데이터 보호 요구 사항은 전송 중 트래픽 암호화를 기본 요건으로 규정합니다. Let's Encrypt는 모든 주요 브라우저가 신뢰하는 무료이자 자동화된 비영리 인증 기관(CA)입니다. 공식 ACME 클라이언트인 Certbot와 함께 사용하면 수동 작업 없이 비용도 들이지 않고 인증서를 발급하고 갱신할 수 있습니다.

이 가이드에서는 Nginx(Ubuntu/Debian)에 인증서를 설치하고, 이를 검증하며, 무엇보다 중요한 — 중단 없이 동작하는 갱신을 구성하는 방법을 다룹니다. 갱신 부분은 그 어느 때보다 중요합니다. Let's Encrypt 인증서는 그동안 유효 기간이 90일이었으며, 업계는 더 짧은 수명으로 이동하고 있습니다(45일 프로파일이 2026년에 단계적으로 배포되기 시작했습니다). 수동 갱신은 더 이상 현실적이지 않으므로 자동화는 필수입니다.

왕국 내에서 VPS 또는 클라우드 서버로 Skyline Cloud를 사용해 호스팅한다면, 아래 단계는 왕국 내 서버에서 그대로 동작하여 데이터와 TLS 종단(termination) 모두를 사우디 영토 안에 유지합니다.

사전 준비 사항

  • sudo 권한이 있는, Ubuntu 22.04/24.04 또는 Debian을 실행하는 클라우드 서버 또는 VPS.
  • 서버의 공인 IP를 가리키는 DNS A 레코드가 설정된 도메인(예: example.com). Skyline 관리형 DNS를 통해 DNS를 관리한다면, 거기에 레코드를 추가하고 전파될 때까지 기다리세요.
  • 80번 포트에서 사이트를 서비스하도록 Nginx가 설치되어 있어야 합니다.
  • 방화벽과 모든 클라우드 보안 그룹에서 80번 및 443번 포트가 열려 있어야 합니다.

계속하기 전에 DNS가 서버로 정상적으로 해석되는지 확인하세요:

dig +short example.com

반환된 IP는 반드시 서버의 공인 IP와 일치해야 합니다. 그렇지 않으면 도메인 검증에 실패합니다.

1단계 — Certbot 설치

권장 방법은 EFF가 유지 관리하며 항상 최신 상태로 유지하는 snap 패키지입니다:

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

snap이 없는 배포판에서는 APT 패키지도 사용할 수 있습니다:

sudo apt update
sudo apt install certbot python3-certbot-nginx

두 방법 모두 아래에서 사용하는 Nginx 플러그인을 포함합니다.

2단계 — 인증서 발급

Nginx 플러그인은 인증서를 발급하는 동시에 서버 블록을 편집하여 한 번에 HTTPS를 활성화합니다:

sudo certbot --nginx -d example.com -d www.example.com

Certbot는 이메일(만료 경고 및 복구에 사용)을 입력하라고 안내하고, ACME 약관에 동의할 것을 요청합니다. HTTP를 HTTPS로 리디렉션할지 물으면, 모든 트래픽이 암호화되도록 Redirect를 선택하세요.

내부적으로 Certbot는 HTTP-01 챌린지를 사용합니다. /.well-known/acme-challenge/ 아래에 토큰을 배치하면, Let's Encrypt가 80번 포트를 통해 이를 가져와 도메인 소유권을 증명합니다.

대안: webroot (Nginx 설정 편집 없음)

TLS 설정이 템플릿화되어 있거나 관리되는 경우처럼 Certbot가 설정을 건드리지 않기를 원한다면, webroot 방식을 사용해 인증서만 발급하세요:

sudo certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com

그런 다음 Nginx 서버 블록에서 파일을 직접 참조합니다:

ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

Nginx는 항상 날짜가 붙은 archive/ 파일이 아니라 live/ 경로를 가리키도록 하세요. live/ 심볼릭 링크는 갱신될 때마다 업데이트됩니다.

3단계 — HTTPS 동작 확인

Nginx를 다시 로드하고 사이트를 엽니다:

sudo nginx -t && sudo systemctl reload nginx

https://example.com에 접속하세요. 자물쇠 아이콘이 보여야 합니다. 명령줄에서 인증서와 인증서 체인을 확인하세요:

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -issuer -dates

이 명령은 발급자(Let's Encrypt)와 유효 기간을 출력합니다.

4단계 — 자동 갱신 설정

이 단계가 새벽 3시의 장애를 막아 줍니다. Certbot는 고정된 일정이 아니라 남은 수명을 기준으로 갱신하므로, 갱신 점검을 자주 실행하는 것이 안전하며 — 의도된 동작이기도 — 합니다.

대부분의 설치 과정에서 이미 갱신 작업이 생성됩니다. 다음으로 확인하세요:

systemctl list-timers | grep certbot

certbot.timer가 보이면 자동 갱신이 활성화되어 있는 것입니다. 기본적으로 하루에 두 번 실행되며, Let's Encrypt 서버의 부하를 분산하기 위해 무작위 지연이 적용됩니다. 하루 두 번 실행은 EFF가 직접 권장하는 방식이며, 90일 인증서와 더 짧은 45일 인증서 모두를 무난하게 처리합니다.

인증서를 발급하지 않고 갱신 테스트

항상 드라이런(dry run)으로 갱신 경로가 처음부터 끝까지 동작하는지 확인하세요. 드라이런은 스테이징 환경을 대상으로 갱신을 시뮬레이션합니다:

sudo certbot renew --dry-run

드라이런이 성공하면 실제 갱신도 성공한다는 의미입니다.

갱신 후 Nginx 다시 로드

갱신된 인증서는 Nginx가 다시 로드되어야 비로소 서비스됩니다. 모든 갱신 시 자동으로 다시 로드가 일어나도록 배포 후크(deploy hook)를 추가하세요:

sudo certbot renew --deploy-hook "systemctl reload nginx"

Certbot는 이 후크를 인증서의 갱신 설정과 함께 저장하므로, 이후의 자동 갱신에서도 Nginx를 알아서 다시 로드합니다. 다시 로드는 무중단(graceful) 방식이어서 라이브 연결에 거의 영향을 주지 않습니다.

타이머가 없는 경우 (수동 cron)

타이머가 미리 구성되어 있지 않은 드문 시스템에서는, 무작위 sleep과 함께 하루 두 번 점검을 실행하는 cron 항목을 추가하세요:

echo "0 0,12 * * * root sleep $((RANDOM \% 3600)) && certbot renew -q --deploy-hook 'systemctl reload nginx'" | sudo tee /etc/cron.d/certbot

한눈에 보는 갱신 방법

방법 사용 시점 Nginx 다시 로드
certbot.timer (systemd) 대부분의 시스템에서 기본값이며 권장됨 배포 후크를 통해
/etc/cron.d/certbot systemd 타이머가 없는 시스템 배포 후크를 통해
수동 certbot renew 일회성 / 문제 해결 전용 --deploy-hook 추가

문제 해결

  • 챌린지 실패 / 타임아웃: 발급 중에는 80번 포트가 인터넷에서 접근 가능해야 합니다. 방화벽과 클라우드 보안 그룹을 확인하세요.
  • DNS 불일치: dig +short example.com을 다시 실행하여 서버 IP와 일치하는지 확인하세요. DNS 변경 후에는 전파될 시간을 두세요.
  • 속도 제한(Rate limited): Let's Encrypt는 도메인당 주당 인증서 발급 수를 제한합니다. 할당량을 소진하지 않도록 테스트에는 --dry-run을 사용하세요.
  • 잘못된 경로 서비스: Nginx가 archive/가 아니라 /etc/letsencrypt/live/...를 참조하는지 확인하세요.

마무리

이제 무인으로 실행되고 웹 서버를 자동으로 다시 로드하는 갱신과 함께, 브라우저가 신뢰하는 무료 SSL 인증서를 Nginx에 갖추게 되었습니다. 이는 90일 수명은 물론 더 짧아진 최신 인증서 수명에도 견고합니다. 이메일도 마찬가지 원리가 적용됩니다. 안전한 메일 전송 역시 중요하며, Skyline 비즈니스 이메일 호스팅은 TLS가 미리 구성되어 제공됩니다. 인증서, 인증서 체인, 규정 준수에 대해 더 깊이 알아보려면 SSL 인증서 리소스 허브를 참고하세요.

빠르고 PDPL을 준수하는 왕국 내 서버에서 현지 아랍어 지원과 함께 이 작업을 실행할 준비가 되셨나요? Skyline Cloud 계정을 만들고 오늘 보안이 적용된 사이트를 배포하세요.

SKYLINE Engineering

@skyline

The engineering team at SKYLINE Industrial Solutions. We publish field-tested guides drawn from real KSA and GCC deployments.

See author profile
SKYLINE engineering services

Need this implemented for you?

Reading is free — building it right takes a team. SKYLINE engineers ship Skyline Cloud for Aramco vendors, banks, hospitals and government agencies across Saudi Arabia. Talk to us before you start.

Aramco Approved Contractor ISO 9001 · ISO 27001 SAMA CSF aligned NCA ECC ready 247+ KSA clients

Comments

0 total · 0 threads
Be the first to leave a comment.