DEVOPS

SSL/TLS 인증서 Let's Encrypt 자동화

junetapa 2026. 2. 25 10 min read

웹사이트를 운영하다 보면 반드시 마주치는 것이 SSL/TLS 인증서 문제다. Let's Encrypt를 알게 된 후로는 완전히 다른 세상이 열렸다. 수십 대 서버에 HTTPS를 적용하며 겪은 경험을 바탕으로 Let's Encrypt 자동화의 모든 것을 정리했다.

SSL/TLS 인증서, 왜 필수인가

HTTPS가 없으면 생기는 일

2024년 기준 크롬, 파이어폭스, 사파리 등 주요 브라우저는 HTTP 사이트에 접속하면 "안전하지 않음" 경고를 눈에 띄게 표시한다. 이는 단순한 경고가 아니라 실제 비즈니스에 영향을 준다. 운영하던 소규모 쇼핑몰에서 SSL 인증서가 만료된 채 3일간 방치했더니, 일일 방문자가 약 40% 감소했고, 구글 Search Console에서도 크롤링 오류가 급증했다. TLS 암호화가 적용되지 않은 사이트에서는 로그인 정보, 결제 데이터 등이 평문으로 전송되기 때문에 보안 사고의 직접적인 원인이 된다.

SEO와 SSL의 관계

구글은 2014년부터 HTTPS를 랭킹 시그널로 사용하고 있고, 해가 갈수록 그 비중이 커지고 있다. 실제로 블로그에 SSL 인증서를 적용한 후 약 2주 만에 주요 키워드의 검색 순위가 평균 3~5위 상승한 경험이 있다. 특히 경쟁이 비슷한 페이지끼리 비교할 때 HTTPS 적용 여부가 결정적인 차이를 만들 수 있다.

유료 인증서 vs 무료 인증서

예전에는 SSL 인증서라고 하면 연간 수만 원에서 수십만 원을 지불해야 했다. 하지만 Let's Encrypt가 등장하면서 상황이 완전히 바뀌었다. 무료라고 해서 보안 수준이 떨어지는 것은 아니다. 암호화 강도는 유료 인증서와 동일한 256비트 AES 암호화를 사용한다. 다만 OV(Organization Validation)나 EV(Extended Validation) 인증은 제공하지 않고, DV(Domain Validation) 인증서만 발급한다.

Let's Encrypt와 Certbot 설치 및 설정

Certbot 설치 방법

Let's Encrypt 인증서를 발급받는 가장 대표적인 도구는 Certbot이다. Ubuntu/Debian 기준으로 설치는 매우 간단하다. sudo apt update && sudo apt install certbot python3-certbot-nginx 한 줄이면 끝이다. CentOS/RHEL 계열이라면 EPEL 저장소를 활성화한 후 sudo yum install certbot python3-certbot-nginx로 설치할 수 있다.

첫 인증서 발급

설치가 끝나면 sudo certbot --nginx -d example.com -d www.example.com 명령으로 인증서를 발급받을 수 있다. Certbot이 자동으로 Nginx 설정 파일을 감지해서 SSL 관련 설정을 추가해 준다. 이 과정에서 HTTP에서 HTTPS로 리다이렉트를 자동 설정할지도 물어보는데, 항상 "예"를 선택한다. 리다이렉트를 설정하지 않으면 HTTP와 HTTPS 두 버전이 공존하면서 중복 콘텐츠 이슈가 발생할 수 있기 때문이다.

와일드카드 인증서 발급

서브도메인이 여러 개라면 와일드카드 인증서가 편리하다. sudo certbot certonly --manual --preferred-challenges dns -d "*.example.com" -d example.com 명령을 사용하면 되는데, 이때 DNS TXT 레코드를 수동으로 추가해야 한다. Cloudflare를 사용한다면 certbot-dns-cloudflare 플러그인으로 완전 자동화가 가능하다.

참고

Nginx를 쓰지 않고 Apache를 쓴다면 python3-certbot-apache를 대신 설치하면 된다. 사용법은 거의 동일하다.

인증서 자동 갱신 완전 자동화

기본 자동 갱신 설정

Let's Encrypt 인증서의 유효 기간은 90일이다. 자동화만 제대로 해놓으면 전혀 신경 쓸 일이 없다. Certbot을 설치하면 기본적으로 systemd 타이머 또는 cron job이 자동 등록된다. sudo systemctl status certbot.timer로 확인할 수 있고, 하루에 두 번 자동으로 갱신 체크가 돌아간다. 인증서 만료 30일 전부터 갱신을 시도하므로 충분한 여유가 있다.

갱신 후 웹서버 재시작 자동화

인증서가 갱신되더라도 웹서버가 새 인증서를 읽어 들이지 않으면 의미가 없다. sudo certbot renew --deploy-hook "systemctl reload nginx"처럼 deploy-hook을 설정하면, 갱신이 성공한 경우에만 Nginx를 리로드한다. 이 설정은 /etc/letsencrypt/renewal/ 디렉토리의 설정 파일에 영구 저장할 수도 있다.

모니터링과 알림 구성

자동화를 믿더라도 모니터링은 별도로 해두는 것이 좋다. 간단한 쉘 스크립트를 만들어서 인증서 만료일을 체크하고, 만료 14일 전에 Slack 알림을 보내도록 설정해 놓았다. openssl s_client -connect example.com:443 명령으로 인증서 정보를 가져온 뒤 날짜를 파싱하는 방식이다. uptimerobot.com 같은 무료 모니터링 서비스를 활용하면 SSL 만료 알림을 이메일로 받을 수도 있다.

장단점 비교와 실전 팁

Let's Encrypt vs 유료 SSL 비교

항목Let's Encrypt (무료)유료 SSL (Sectigo, DigiCert 등)
비용완전 무료연 5만~100만 원
인증 수준DV (도메인 검증)만 지원DV / OV / EV 모두 가능
유효 기간90일 (자동 갱신)1~2년
와일드카드지원 (DNS 챌린지 필요)지원 (추가 비용 가능)
암호화 강도동일 (256비트 AES)동일 (256비트 AES)
기술 지원커뮤니티 포럼전화/이메일 지원
보증 금액없음최대 175만 달러
설정 난이도CLI 기반, 약간의 학습 필요관리 패널에서 간편 설치
적합 대상개인/소규모 서비스기업/금융/전자상거래

실전에서 얻은 꿀팁

Tip 1

스테이징 서버로 먼저 테스트하라. Let's Encrypt에는 발급 횟수 제한(주당 도메인당 50회)이 있다. 설정을 실험할 때는 --staging 플래그를 붙여서 테스트 인증서를 발급받아야 한다.

Tip 2

HTTP/2를 함께 활성화하라. SSL을 적용하면 HTTP/2를 사용할 수 있는데, Nginx 설정에서 listen 443 ssl http2;로 간단히 활성화된다. 체감 속도가 확실히 빨라진다.

Tip 3

SSL Labs에서 등급을 확인하라. ssllabs.com/ssltest에서 도메인을 입력하면 SSL 설정 등급을 A+부터 F까지 평가해 준다. HSTS 헤더 추가, 취약한 cipher suite 제거 등의 조치로 A+ 등급을 받을 수 있다.

Tip 4

갱신 실패 시 대비 플랜을 마련하라. DNS 문제, 방화벽 설정 변경, 서버 마이그레이션 등으로 자동 갱신이 실패할 수 있다. 갱신 실패 시 이메일 + Slack 이중 알림을 설정하고, 수동 갱신 절차를 문서화해 놓아야 한다.

Tip 5

Docker 환경에서는 Traefik을 고려하라. 컨테이너 기반 환경이라면 Traefik 리버스 프록시가 Let's Encrypt 인증서를 완전 자동으로 발급/갱신해 준다. docker-compose.yml에 몇 줄만 추가하면 된다.

트러블슈팅과 마무리

자주 겪는 문제와 해결법

가장 흔한 문제는 포트 80 차단이다. Let's Encrypt의 HTTP-01 챌린지는 80번 포트로 검증하기 때문에, 방화벽에서 80번을 열어두어야 한다. AWS Security Group이나 iptables 설정을 꼭 확인해야 한다.

두 번째로 흔한 것은 Nginx 설정 충돌인데, 기존에 수동으로 SSL 설정을 넣어둔 경우 Certbot이 중복 설정을 추가해서 에러가 나는 경우가 있다. 이럴 때는 기존 SSL 블록을 주석 처리한 후 Certbot을 다시 실행하면 깔끔하게 해결된다.

세 번째는 CAA 레코드 문제인데, DNS에 CAA 레코드가 설정되어 있으면서 Let's Encrypt가 허용 목록에 없으면 발급이 거부된다. dig example.com CAA로 확인하고, 필요하면 0 issue "letsencrypt.org" 레코드를 추가하면 된다.

추천 대상 정리

강력 추천
  • 개인 블로그, 포트폴리오 사이트를 운영하는 개발자
  • 비용을 최소화하고 싶은 스타트업이나 소규모 팀
  • 여러 도메인/서브도메인을 관리하는 DevOps 엔지니어
  • Docker/Kubernetes 기반 마이크로서비스를 운영하는 팀
  • SSL/TLS를 처음 접하고 학습 목적으로 직접 설정해 보고 싶은 분

마무리

SSL/TLS 인증서는 이제 선택이 아니라 필수다. Let's Encrypt 덕분에 비용 부담 없이 누구나 HTTPS를 적용할 수 있게 되었다. 처음 설정할 때 30분 정도 투자하면, 그 이후로는 자동 갱신이 알아서 돌아가니 거의 신경 쓸 일이 없다. 현재 운영 중인 모든 서비스에 Let's Encrypt를 사용하고 있고, 지난 2년간 인증서 관련 사고는 단 한 번도 없었다. 아직 HTTPS를 적용하지 않은 사이트가 있다면, 오늘 당장 시작해 보길 권한다.

SSLTLSLet's EncryptHTTPSCertbotDevOps
junetapa
junetapa
AI 도구를 직접 써보고 솔직한 경험을 공유하는 개발자.
Twitter Facebook URL 복사