Let's Encrypt에 대해 알아보자.

조정환조정환
5 min read

1. 들어가며: “HTTPS 보급의 선두주자, Let’s Encrypt”

웹 보안을 강화하려면 HTTP 대신 HTTPS가 필수지만, 과거에는 SSL/TLS 인증서를 발급받으려면 비용도 만만치 않고, 번거로운 서류 절차가 많았습니다.

Let’s Encrypt는 이 문제를 혁신적으로 해결한 비영리 인증기관(CA)입니다.

  • 목표: “웹 전반의 HTTPS 전환을 쉽고, 무료로 만들자.”

  • 주요 특징: 무료, 자동화(ACME 프로토콜), 광범위한 브라우저 신뢰.

오늘날 대부분의 호스팅 환경이나 개인 서버에서 Let’s Encrypt를 기본으로 도입할 정도로, 이젠 HTTPS 보급의 표준이 되었습니다.


[Q&A]

Q: “정말 누구나 무료로 쓸 수 있나요?”
A: 네, Let’s Encrypt는 비영리 단체(ISRG) 산하 프로젝트이며, 전 세계적으로 무료 인증서를 발급하고 있습니다.


2. Let’s Encrypt의 동작 원리: ACME 프로토콜

Let’s Encrypt가 사람의 개입 없이 자동 발급을 가능하게 하는 핵심은 바로 ACME (Automatic Certificate Management Environment) 프로토콜입니다.

  • ACME 프로토콜:

    • 서버(클라이언트)와 CA 간의 “도메인 검증” → “인증서 발급” 과정을 자동화한 표준.

    • Let’s Encrypt의 대표 클라이언트가 Certbot이며, 이를 통해 대부분의 과정을 몇 줄 명령어로 해결할 수 있습니다.

2.1. ACME 기본 흐름

  1. 클라이언트(서버) → Let’s Encrypt: “인증서 발급하고 싶어요!”

  2. Let’s Encrypt → “그럼 도메인 소유 증명해 봐.”

  3. 클라이언트HTTP-01 또는 DNS-01 방식으로 소유 증명을 수행. (정말 Chill 하다…)

  4. 검증 완료 → Let’s Encrypt가 인증서 서명.

  5. 클라이언트는 최종 인증서를 다운로드 받아 서버에 적용.


[Q&A]

Q: “ACME가 있으면 어떤 점이 좋은가요?”
A: 수동 인증서 발급(서류, 이메일 등) 없이 자동화가 가능하기 때문에, 인증서 발급부터 갱신(주기 90일)까지 간편해집니다.


3. 도메인 소유 증명 방식 (HTTP-01 & DNS-01)

인증서 발급에서 핵심은 “이 도메인이 정말 당신 소유인지”를 증명하는 것입니다. Let’s Encrypt는 크게 두 가지 방식을 지원합니다.

3.1. HTTP-01 Challenge

가장 일반적인 방식으로, 웹서버가 HTTP 포트(80)를 통해 특정 파일을 제공할 수 있어야 합니다.

  1. Let’s Encrypt가 특수 토큰 파일 생성 요청

  2. 서버(클라이언트)에서 .well-known/acme-challenge/ 경로에 토큰 파일 배치

  3. Let’s Encrypt가 http://yourdomain.com/.well-known/acme-challenge/<토큰>으로 접속

  4. 정상 응답 → 도메인 소유 증명 완료 → 인증서 발급

3.1.1. 주의 사항

  • 포트 80이 방화벽이나 클라우드 보안 그룹에서 허용되어 있어야 함.

  • 웹서버(Nginx, Apache)가 정상 실행 중이고, .well-known/acme-challenge/ 경로를 리디렉션 등으로 차단하지 않아야 함.

  • DNS A 레코드가 서버 IP와 정확히 일치해야 함.

3.2. DNS-01 Challenge

DNS 레코드를 이용하는 방식으로, 와일드카드(*.example.com) 인증서 발급 시 필수입니다.

  1. Let’s Encrypt가 TXT 레코드 생성 요청

  2. 사용자가 _acme-challenge.yourdomain.com에 해당 TXT 값을 등록

  3. Let’s Encrypt가 DNS를 조회, TXT 값 확인

  4. 확인 완료 → 도메인 소유 증명 → 인증서 발급

3.2.1. 장점 & 예시

  • 와일드카드 인증서 발급 가능

  • 웹서버가 없어도(포트 80이 막혀 있어도) 인증 가능

  • DNS 공급자 API와 연동하면 자동화 가능 (AWS Route53, Cloudflare 등)


[Q&A]

Q: “어떤 방식을 써야 할까요?”
A:

  • 웹서버가 이미 열려 있고 포트 80 접근이 가능 → “HTTP-01”이 간단

  • 와일드카드가 필요하거나 포트 80 개방이 불가 → “DNS-01”이 필수


4. Let’s Encrypt는 정말 무료? 어떻게 운영될까?

이렇게 편리하고 무료라면, Let’s Encrypt는 어떻게 돈을 버는 걸까?” 하는 궁금증이 생길 수 있습니다.

4.1. 비영리 모델 (ISRG 산하)

  • Let’s Encrypt는 ISRG(Internet Security Research Group)라는 비영리 재단이 운영합니다.

  • 수익 창출을 목표로 하지 않으며, 기업 후원개인 기부로 유지되고 있습니다.

4.2. 주요 후원사

  • Mozilla, Google, Cisco, Akamai, Meta(페이스북)

  • 이들은 “웹 보안이 올라가면 자신들의 플랫폼 생태계가 건전해진다”는 이점 때문에 적극적으로 후원합니다.

4.3. 사용자는 0원, 자율 기부 가능

  • 실제 인증서 발급・갱신에 비용이 전혀 들지 않습니다.

  • Let’s Encrypt 공식 웹사이트에서 기부(도네이션)도 받지만, 의무가 아니며 자유롭게 선택할 수 있습니다.


[Q&A]

Q: “정말 과금 요소가 하나도 없나요?”
A: 네, Let’s Encrypt는 특정 프리미엄 제품을 제공하지 않습니다.
기업 후원 + 기부금으로 재원을 마련하므로, 유료 정책이 없습니다.


5. 인증서 발급 실무 예시: Certbot

5.1. Certbot 설치 & 실행

가장 많이 쓰이는 공식 클라이언트는 Certbot입니다. (Electronic Frontier Foundation(EFF)에서 개발)

예시 (Ubuntu / Nginx)

sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
  • Certbot이 Nginx 설정을 자동으로 찾아서, 인증서 설정(SSL/TLS 구문)까지 수정해줄 수 있습니다.

  • Apache도 유사한 방식(python3-certbot-apache).

5.2. 자동 갱신

  • Let’s Encrypt 인증서는 90일 만료 주기를 갖습니다.

  • 기본적으로 Certbot은 crontab 또는 systemd timer를 설정해 자동으로 갱신 시도합니다.

  • 만약 직접 crontab 설정이 필요하다면:

echo "0 2 * * * certbot renew --quiet" | sudo tee /etc/cron.d/certbot-renew

[Q&A]

Q: “90일마다 갱신해야 하는 건 귀찮지 않나요?”
A: 자동화(ACME) 덕분에 사실상 사용자 개입 없이 갱신이 진행됩니다.
이 주기가 더 짧으면 보안성이 높아지고, 갱신 실수 위험도 낮아집니다 (자주 갱신하니 잊을 일이 없음).


6. HTTP-01 인증 실패 시 대처법

HTTP-01 방식은 편리하지만, 아래처럼 설정이 어긋나면 실패할 수 있습니다.

  1. 포트 80 차단: 방화벽, 클라우드 보안 그룹에서 허용해야 함

  2. DNS A 레코드 불일치: 도메인 → 실제 서버 IP 매핑이 잘못

  3. 리디렉션 문제: .well-known/acme-challenge/ 경로가 HTTPS나 다른 도메인으로 리디렉션됨

  4. Webroot 경로 불일치: Certbot이 생성한 인증 파일을 웹서버가 제대로 제공 못 함

Nginx 예시 설정

server {
    listen 80;
    server_name yourdomain.com;

    # acme-challenge 경로는 예외 처리
    location /.well-known/acme-challenge/ {
        root /var/www/html; 
        allow all;
    }

    # 그 외 모든 요청은 HTTPS로 리디렉션
    location / {
        return 301 https://$host$request_uri;
    }
}

[Q&A]

Q: “HTTP 포트를 전혀 열 수 없는 환경이라면?”
A: 그 경우 DNS-01 인증 방식을 선택하시거나, 다른 CA 검증 방식을 고려해야 합니다.


7. 추가 고려 사항: Wildcard, Reverse Proxy, HSTS…

  1. Wildcard(*.domain.com):

    • Let’s Encrypt 발급 시 DNS-01 사용 필수
  2. Reverse Proxy(예: Nginx, HAProxy):

    • 내부 서버에 전달하기 전에, 프록시가 .well-known/acme-challenge 경로를 직접 처리하도록 설정
  3. HSTS:

    • HTTPS를 기본으로 강제(HSTS)하면 HTTP 접근이 차단될 수 있으니, HTTP-01 인증 시 일시적으로 예외 처리가 필요
  4. Forward Secrecy:

    • Let’s Encrypt 자체보다는 서버 TLS 설정(예: ssl_ciphers, ssl_protocols)에서 ECDHE를 켜서 최적화

8. 결론 및 정리

Let’s Encrypt는:

  1. 비영리 운영으로 무료 인증서를 제공,

  2. ACME 프로토콜을 통해 자동화를 구현,

  3. 전 세계 수억 개 사이트에 안전한 HTTPS 환경을 보급하고 있습니다.

  • 도메인 소유 증명은 HTTP-01(웹서버) 또는 DNS-01(DNS 레코드) 방식

  • 90일 주기로 자동 갱신 → 관리 부담 최소화

  • 후원 + 기부로 운영 → 사용자에겐 완전 무료

실제로 많은 호스팅 업체(예: AWS, DigitalOcean, GitHub Pages 등)가 Let’s Encrypt 지원을 기본 제공하고, 다양한 CDN(Cloudflare 등)도 쉽게 연동 가능합니다.

“HTTPS 전환이 어려울 것 같다”라고 생각했던 분이라면, Let’s Encrypt로 무료 & 자동화 SSL을 경험해보세요.
보안은 이제 선택이 아닌 기본 설정이 되어야 합니다.


[추가 참고 & 링크]

감사합니다!
추가 질문이 있으면 언제든 댓글로 남겨주세요.

0
Subscribe to my newsletter

Read articles from 조정환 directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

조정환
조정환