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


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 기본 흐름
클라이언트(서버) → Let’s Encrypt: “인증서 발급하고 싶어요!”
Let’s Encrypt → “그럼 도메인 소유 증명해 봐.”
클라이언트가 HTTP-01 또는 DNS-01 방식으로 소유 증명을 수행. (정말 Chill 하다…)
검증 완료 → Let’s Encrypt가 인증서 서명.
클라이언트는 최종 인증서를 다운로드 받아 서버에 적용.
[Q&A]
Q: “ACME가 있으면 어떤 점이 좋은가요?”
A: 수동 인증서 발급(서류, 이메일 등) 없이 자동화가 가능하기 때문에, 인증서 발급부터 갱신(주기 90일)까지 간편해집니다.
3. 도메인 소유 증명 방식 (HTTP-01 & DNS-01)
인증서 발급에서 핵심은 “이 도메인이 정말 당신 소유인지”를 증명하는 것입니다. Let’s Encrypt는 크게 두 가지 방식을 지원합니다.
3.1. HTTP-01 Challenge
가장 일반적인 방식으로, 웹서버가 HTTP 포트(80)를 통해 특정 파일을 제공할 수 있어야 합니다.
Let’s Encrypt가 특수 토큰 파일 생성 요청
서버(클라이언트)에서
.well-known/acme-challenge/
경로에 토큰 파일 배치Let’s Encrypt가
http://yourdomain.com/.well-known/acme-challenge/<토큰>
으로 접속정상 응답 → 도메인 소유 증명 완료 → 인증서 발급
3.1.1. 주의 사항
포트 80이 방화벽이나 클라우드 보안 그룹에서 허용되어 있어야 함.
웹서버(Nginx, Apache)가 정상 실행 중이고,
.well-known/acme-challenge/
경로를 리디렉션 등으로 차단하지 않아야 함.DNS A 레코드가 서버 IP와 정확히 일치해야 함.
3.2. DNS-01 Challenge
DNS 레코드를 이용하는 방식으로, 와일드카드(*.example.com
) 인증서 발급 시 필수입니다.
Let’s Encrypt가 TXT 레코드 생성 요청
사용자가
_acme-challenge.yourdomain.com
에 해당 TXT 값을 등록Let’s Encrypt가 DNS를 조회, TXT 값 확인
확인 완료 → 도메인 소유 증명 → 인증서 발급
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 방식은 편리하지만, 아래처럼 설정이 어긋나면 실패할 수 있습니다.
포트 80 차단: 방화벽, 클라우드 보안 그룹에서 허용해야 함
DNS A 레코드 불일치: 도메인 → 실제 서버 IP 매핑이 잘못
리디렉션 문제:
.well-known/acme-challenge/
경로가HTTPS
나 다른 도메인으로 리디렉션됨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…
Wildcard(
*.domain.com
):- Let’s Encrypt 발급 시 DNS-01 사용 필수
Reverse Proxy(예: Nginx, HAProxy):
- 내부 서버에 전달하기 전에, 프록시가
.well-known/acme-challenge
경로를 직접 처리하도록 설정
- 내부 서버에 전달하기 전에, 프록시가
HSTS:
- HTTPS를 기본으로 강제(HSTS)하면 HTTP 접근이 차단될 수 있으니, HTTP-01 인증 시 일시적으로 예외 처리가 필요
Forward Secrecy:
- Let’s Encrypt 자체보다는 서버 TLS 설정(예:
ssl_ciphers
,ssl_protocols
)에서 ECDHE를 켜서 최적화
- Let’s Encrypt 자체보다는 서버 TLS 설정(예:
8. 결론 및 정리
Let’s Encrypt는:
비영리 운영으로 무료 인증서를 제공,
ACME 프로토콜을 통해 자동화를 구현,
전 세계 수억 개 사이트에 안전한 HTTPS 환경을 보급하고 있습니다.
도메인 소유 증명은 HTTP-01(웹서버) 또는 DNS-01(DNS 레코드) 방식
90일 주기로 자동 갱신 → 관리 부담 최소화
후원 + 기부로 운영 → 사용자에겐 완전 무료
실제로 많은 호스팅 업체(예: AWS, DigitalOcean, GitHub Pages 등)가 Let’s Encrypt 지원을 기본 제공하고, 다양한 CDN(Cloudflare 등)도 쉽게 연동 가능합니다.
“HTTPS 전환이 어려울 것 같다”라고 생각했던 분이라면, Let’s Encrypt로 무료 & 자동화 SSL을 경험해보세요.
보안은 이제 선택이 아닌 기본 설정이 되어야 합니다.
[추가 참고 & 링크]
감사합니다!
추가 질문이 있으면 언제든 댓글로 남겨주세요.
Subscribe to my newsletter
Read articles from 조정환 directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
