SSL 인증서의 작동원리와 자동갱신 구조

SSL 인증서의 작동원리

워드프레스, 도커, EC2, 클라우드플레어 등으로 사이트를 운영하다 보면
“SSL 인증서 설치 완료”, “HTTPS 적용됨”이라는 문구를 자주 보게 됩니다.

그런데, 한 번쯤은 이런 의문이 들죠.

“SSL 인증서는 정확히 뭐고,
왜 이걸 설치해야 하는 거지?”

이번 글에서는 SSL의 원리부터 자동갱신(certbot) 구조까지,
실무에서 바로 쓸 수 있는 내용을 중심으로 정리합니다.


HTTPS와 SSL의 관계

SSL(Secure Sockets Layer)은
웹 브라우저와 서버 간의 데이터를 암호화해 주는 기술입니다.

HTTP는 데이터를 “평문”으로 전송하지만,
HTTPS는 SSL을 통해 데이터를 “암호화”해서 전송합니다.

👉 즉,

  • HTTP → 누군가 네트워크에서 내용을 가로볼 수 있음
  • HTTPS → 내용이 암호화되어 외부에서 볼 수 없음

예를 들어
로그인 비밀번호나 결제 정보가 HTTP로 전송되면 그대로 노출되지만,
HTTPS에서는 안전하게 암호화되어 전송됩니다.


SSL 인증서가 하는 일

SSL 인증서는 “이 사이트는 진짜 맞습니다” 라는 신분증 역할을 합니다.

즉, 브라우저가 접속할 때 이렇게 확인합니다 👇

1️⃣ 사이트에 SSL 인증서가 있는지 확인
2️⃣ 인증서를 발급한 기관(CA, Certificate Authority)이 신뢰할 수 있는 곳인지 검사
3️⃣ 인증서 안의 공개키(Public Key)로 암호화 통신 시작

이 과정을 TLS 핸드셰이크(TLS Handshake) 라고 부릅니다.
(TLS는 SSL의 최신 버전으로, 지금은 SSL 대신 TLS가 쓰입니다.)


SSL 통신 과정 (핸드셰이크 요약)

1️⃣ 클라이언트(브라우저) → “서버야, 인증서 보여줘!”
2️⃣ 서버 → 인증서(공개키) 전달
3️⃣ 브라우저 → 인증서 유효성 검사 (발급기관, 기간, 도메인 일치 여부)
4️⃣ 검증 완료 시 → 세션키 생성 후 암호화된 연결 시작

이후 모든 데이터는 세션키로 암호화되어 교환됩니다.
그래서 중간에 누가 데이터를 훔쳐도 내용을 해독할 수 없습니다.


SSL 인증서의 종류

종류설명예시
DV (Domain Validation)도메인만 검증, 무료/자동 발급 가능Let’s Encrypt, ZeroSSL
OV (Organization Validation)기업 정보 포함, 상업용GeoTrust, Comodo
EV (Extended Validation)회사명까지 표시, 신뢰도 최고DigiCert, Sectigo

일반적인 블로그·기업 사이트라면 DV형(무료) 으로 충분합니다.
워드프레스, Nginx, Cloudflare 모두 DV형을 기본 지원합니다.


SSL 인증서 파일 구성

서버에 설치되는 SSL 인증서는 보통 다음 3가지 파일로 구성됩니다.

파일명역할
.crt 또는 .pem인증서 본문 (공개키 포함)
.key개인키 (Private Key) — 절대 유출 금지
.ca-bundle상위 인증기관의 체인 파일 (CA Chain)

이 3개가 함께 있어야 브라우저에서 “자물쇠 아이콘 🔒”이 뜹니다.


실무에서 인증서를 설치하는 방법

1️⃣ Let’s Encrypt + Certbot (가장 일반적인 방법)

리눅스 / Nginx / Apache 환경에서는 다음 명령으로 자동 발급이 가능합니다.

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d modoomo.net -d www.modoomo.net

→ Certbot이 자동으로 Nginx 설정을 수정하고 HTTPS 적용까지 끝냅니다.

이후 브라우저에서 https://modoomo.net 접속 시
자물쇠 아이콘이 표시됩니다.


2️⃣ cPanel에서 설치하기

호스팅 환경(cPanel, ChemiCloud, Hostinger 등)은
“SSL/TLS → 무료 Let’s Encrypt 설치” 메뉴에서 클릭 한 번으로 설정 가능.

갱신 또한 자동으로 진행됩니다.


SSL 자동갱신 구조 (Certbot Renewal)

SSL 인증서는 유효기간이 90일입니다.
그래서 갱신을 자동으로 돌려야 합니다.

Certbot은 아래 명령으로 자동갱신을 설정합니다 👇

sudo crontab -e

그리고 다음 줄 추가:

0 3 * * * /usr/bin/certbot renew --quiet

➡ 매일 새벽 3시에 갱신을 확인하고,
➡ 만료 30일 전이면 자동으로 새 인증서를 발급받습니다.

갱신 후 웹서버 재시작도 자동 적용됩니다.


Cloudflare의 SSL 프록시 구조

Cloudflare를 쓰면,
실제로 내 서버에 SSL을 직접 설치하지 않아도 HTTPS가 동작합니다.

이유는 Cloudflare가 중간에서 프록시(Proxy) 역할을 하기 때문입니다.

구간암호화 여부설명
사용자 ↔ Cloudflare✅ HTTPS 적용됨
Cloudflare ↔ 내 서버선택 (Flexible / Full / Full Strict)
  • Flexible: 서버는 HTTP여도 OK
  • Full: 서버도 HTTPS 필요 (인증서 무관)
  • Full Strict: 서버 인증서까지 검증 (가장 안전)

Cloudflare + Let’s Encrypt를 함께 쓰면
성능 + 보안을 모두 확보할 수 있습니다.


SSL 인증서가 안 될 때 확인할 것

문제원인해결
NET::ERR_CERT_DATE_INVALID인증서 만료sudo certbot renew 실행
ERR_CERT_COMMON_NAME_INVALID도메인 불일치인증서 재발급 (-d example.com)
자물쇠 대신 “주의 요함”체인(CA) 누락.ca-bundle 포함 확인
Cloudflare 활성화 후 525 오류서버 SSL 없음Flexible → Full 변경

마무리 — HTTPS는 사이트 신뢰의 기본

SSL 인증서는 이제 선택이 아니라 필수입니다.
검색엔진(특히 구글)은 HTTPS가 아닌 사이트를 검색 순위에서 제외하거나 낮추기도 합니다.

요약하자면 👇

  • HTTPS = 암호화 + 신뢰 + SEO
  • Let’s Encrypt = 무료 + 자동갱신
  • Certbot = 1회 설치로 끝, cron으로 자동화
  • Cloudflare = 중간 프록시로 IP 보호 + SSL 강화