이 글에서는 카카오클라우드 로드밸런서와 Let’s Encrypt를 활용해 SSL/TLS를 구성하고, HTTPS로 서비스하는 과정을 정리했습니다.
💡 그렇다면 SSL/TLS란 무엇일까?
SSL(Secure Sockets Layer)과 TLS(Transport Layer Security)는 인터넷 데이터를 암호화하여 도청이나 위조를 방지하는 보안 프로토콜입니다. 우리가 자주 접하는 HTTPS는 이 SSL/TLS 위에서 동작하며, 웹에서 안전한 통신을 보장하는 데 사용됩니다.
User → DNS → ALB (SSL 터미네이션) → 백엔드 서버 (HTTP)
💡 왜 이렇게 구성했을까?
두 개의 독립적인 서비스 구성
내도메인.한국에서 다음과 같이 설정하였습니다.
1) Certbot 설치
brew install certbot
‼️ Certbot은 Let’s Encrypt에서 제공하는 무료 오픈소스 도구로, TLS 인증서의 발급과 갱신을 자동화할 수 있습니다. 루트 도메인, 특정 서브도메인, 와일드카드(*.example.com) 인증서까지 모두 무료로 발급할 수 있으며, 유효기간은 90일, 갱신은 만료 30일 전부터 무제한 가능합니다.
2) 인증 방식
✨ 저는 여러 서브도메인을 사용하고 있어, 하나의 인증서로 모든 서브도메인을 커버할 수 있는 DNS 방식을 선택했습니다.
3) 인증서 발급 명령어
sudo certbot certonly --manual --preferred-challenges=dns \
-d "*.playus.o-r.kr" -d "playus.o-r.kr"
certonly 인증서만 발급--manual 수동 인증 (DNS 설정을 직접 입력)--preferred-challenges=dns DNS 방식으로 소유권 인증-d "*.playus.o-r.kr" 모든 서브도메인을 포함-d "playus.o-r.kr" 루트 도메인도 포함certbot 실행 중 아래와 같이 이메일 입력을 요청받습니다
Enter email address or hit Enter to skip.
(Enter 'c' to cancel):
이메일 주소 용도
4) DNS TXT 레코드 추가
_acme-challenge.playus.o-r.kr TXT "인증 문자열"

🥳 발급 완료!
5) 발급된 파일 위치
/etc/letsencrypt/live/playus.o-r.kr/
├── fullchain.pem (인증서)
├── privkey.pem (개인키)
├── cert.pem
└── chain.pem

인증서 프라이빗 키 privkey.pem 내용 전체 복사인증서 본문 fullchain.pem 내용 전체 복사sudo ls -la /etc/letsencrypt/live/playus.o-r.kr/
sudo cat /etc/letsencrypt/live/playus.o-r.kr/privkey.pem
sudo cat /etc/letsencrypt/live/playus.o-r.kr/fullchain.pem
카카오클라우드에 인증서를 등록하는 과정에서 다음과 같은 오류가 발생했습니다.
SSL 인증서의 키 길이가 보안 요구 사항을 충족하지 않습니다.
최소 길이는 2048 이상이어야 합니다.
🚨 Let’s Encrypt 기본 설정이 ECC(Elliptic Curve) 기반 인증서이기 때문이며, 카카오클라우드는 현재 RSA 2048bit 이상만 지원합니다.
1) 기존 인증서 삭제
sudo rm -rf /etc/letsencrypt/live/playus.o-r.kr/
sudo rm -rf /etc/letsencrypt/archive/playus.o-r.kr/
sudo rm -rf /etc/letsencrypt/renewal/playus.o-r.kr.conf
2) RSA 2048 인증서로 재발급
sudo certbot certonly --manual --preferred-challenges=dns \
--key-type rsa --rsa-key-size 2048 \
-d "*.playus.o-r.kr" -d "playus.o-r.kr"
‼️ --key-type rsa --rsa-key-size 2048 옵션을 반드시 포함해야 합니다.
3) 인증서 업로드
인증서 본문에는 다음 두 인증서를 모두 포함해야 합니다.
fullchain.pem 파일에는 이 두 가지가 이미 모두 포함되어 있으므로 그 내용을 그대로 복사해서 인증서 본문에 넣으면 됩니다.
-----BEGIN CERTIFICATE-----
[서버 인증서]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[중간 CA 인증서]
-----END CERTIFICATE-----
프라이빗 키에는 privkey.pem 내용 전체를 입력합니다.
-----BEGIN PRIVATE KEY-----
[privkey.pem 내용]
-----END PRIVATE KEY-----
인증서 체인은 본문에 포함되어 있기 때문에 비워도 무방합니다.
인증서 신뢰 구조
Root CA (브라우저 내장)
↓ 신뢰
Intermediate CA (Let's Encrypt R10)
↓ 신뢰
Server Certificate (*.playus.o-r.kr)
↓ 검증
사용자 브라우저 또는 클라이언트
적용 결과
외부: https://web.playus.o-r.kr
↓ (HTTPS)
ALB: SSL 처리
↓ (HTTP)
백엔드: [프라이빗 IP]:80 (기존 HTTP 그대로)
카카오 클라우드 ALB에서 다음과 같이 HTTPS 리스너를 추가합니다.

설정 항목
- Protocol: HTTPS
- Port: 443
- SSL Certificate: 등록한 인증서 선택
- Backend Set: 기존 HTTP 백엔드 셋 연결