본문으로 건너뛰기

버그 제보

이상한 점을 알려 주시면 고칠게요. 지금 보고 있는 페이지와 브라우저 정보가 함께 담겨요.

페이지:

Frontend

HTTPS 전환: 인증서 고르기부터 리다이렉트까지

작성 2026. 10. 21.추가
목차9개 항목
출처와 참고

Vladislav Denishev의 「HTTP에서 HTTPS로 전환하기 위한 완벽 가이드」(웹액츄얼리 번역, 2018.11)를 바탕으로 재구성한 노트다. 혼합 콘텐츠는 web.dev의 「What is mixed content?」, 「Fixing mixed content」, 「Why HTTPS matters」를 바탕으로 보강했다.

HTTPS 전환이란

HTTPS는 HTTP를 TLS로 감싸 기밀성·무결성·인증을 보장한다. 원리(대칭키·공개키, 핸드셰이크, HSTS)는 HTTPS와 TLS에 있다. 이 노트는 이미 HTTP로 운영하던 사이트를 HTTPS로 옮기는 절차를 다룬다.

HTTPS는 선택 사항이 아니다. 브라우저는 HTTP 페이지를 "안전하지 않음"으로 표시하고, 서비스 워커·위치·카메라·클립보드 같은 API는 보안 컨텍스트에서만 동작하며, HTTP/2와 HTTP/3도 사실상 TLS 위에서만 쓴다.

인증서 고르기

검증 수준

웹사이트에는 도메인 통제만 확인하는 DV 인증서면 충분하다. OV·EV는 법인 확인을 더할 뿐 암호화 강도는 같고, 브라우저도 더는 구별해 보여 주지 않는다. 세 수준의 비교는 HTTPS와 TLS에 있다.

도메인 범위

종류덮는 이름비고
단일 도메인example.com, www.example.com주체 대체 이름(SAN) 필드에 둘 다 넣는 것이 보통이다
다중 도메인 (SAN)목록에 적은 서로 다른 도메인·서브도메인인증서를 보면 묶인 도메인이 다 드러난다. 관련 있는 도메인끼리만 묶는다
와일드카드*.example.com의 한 단계 서브도메인a.b.example.com은 덮지 않는다. ACME에서는 DNS 검증으로만 받는다

키 종류

ECDSA(ECC) 키는 RSA보다 작고 빠르다. P-256이면 충분하다. RSA는 호환성이 필요할 때 2048비트를 쓴다. 4096비트는 핸드셰이크 비용만 늘린다.

발급과 갱신

flowchart LR
  a["개인 키 생성"] --> b["CSR<br/>(인증서 서명 요청: 공개 키 + 도메인 정보)"]
  b --> c["CA 검증"] --> d["서명된 인증서"] --> e["서버 설치"]
  • 개인 키는 서버 밖으로 내보내지 않고, 권한을 최소(600)로 둔다. 유출이 의심되면 즉시 폐기(revoke) 하고 새로 받는다.
  • 파일 형식은 텍스트(Base64)인 PEM과 바이너리인 DER이 있다. 확장자(.crt, .cer, .key)는 관례일 뿐이다.
  • 수동 발급·갱신은 하지 않는다. ACME로 자동화한다. certbot, Caddy, Traefik, 클라우드 로드 밸런서, Vercel·Netlify·Cloudflare 같은 호스팅이 이 일을 대신한다. 공개 인증서의 유효 기간이 47일까지 줄어드는 흐름은 HTTPS와 TLS에 있다.
  • 한 IP에서 여러 HTTPS 사이트를 운영하는 것은 SNI(Server Name Indication)로 해결된다. 모든 현대 클라이언트가 지원한다.

전환 체크리스트

순서할 일이유
1인증서 설치 후 HTTPS로 모든 페이지가 열리는지 확인
2혼합 콘텐츠(mixed content) 제거HTTPS 페이지가 http:// 이미지·스크립트를 부르면 브라우저가 차단하거나 경고한다. 자원 URL을 https://나 상대 경로로 바꾸고, 남은 것은 CSP upgrade-insecure-requests로 올린다(하위 리소스만 올리고 페이지 자체는 올리지 않으며 브라우저가 기억하지도 않으므로, 링크를 고치기 전 임시 보강이다). 남은 혼합 콘텐츠는 DevTools 보안 패널이나 Network 필터 mixed-content:all로 찾는다(DevTools Network 패널)
3HTTP → HTTPS 301 리다이렉트검색 엔진이 새 URL로 신호를 옮긴다. canonical·사이트맵·내부 링크도 https로 바꾼다(SEO 기초)
4HSTS 헤더 추가첫 요청 이후 브라우저가 스스로 HTTPS로만 접속한다. 짧은 max-age로 시작해 늘리고, 안정되면 preload 목록 등록을 검토한다
5쿠키에 Secure 속성인증 쿠키가 평문으로 새지 않게 한다
6서버 TLS 설정 점검TLS 1.2 이상만 허용하고 1.3을 우선한다. Mozilla SSL Configuration Generator로 설정을 만들고, Qualys SSL Labs 서버 테스트로 확인한다
7외부 연동 갱신분석 도구·검색 콘솔·결제·웹훅에 등록된 URL을 https로 바꾼다

혼합 콘텐츠의 두 종류

혼합 콘텐츠는 HTTPS로 받은 페이지가 하위 리소스를 HTTP로 부르는 상태다. 그 요청은 도청·변조될 수 있어 페이지 전체의 보안이 그 리소스 수준으로 떨어진다. 경고가 뜰 때는 이미 요청이 나간 뒤라 늦다.

종류대상위험브라우저 처리
능동(active, 차단 대상)스크립트, 스타일시트, iframe, fetch·XHR, 폰트 등 페이지를 바꾸거나 코드를 실행할 수 있는 것공격자가 페이지 전체를 장악한다(로그인 정보·세션 쿠키 탈취, 다른 사이트로 이동)차단한다
수동(passive, 업그레이드 대상)<img>, <audio>, <video>이미지 바꿔치기, 어떤 페이지·상품을 보는지 추적주요 브라우저는 https://로 자동 업그레이드해 요청하고, HTTPS로 제공되지 않으면 불러오지 않는다

자동 업그레이드는 HTTPS 버전이 없으면 리소스가 깨지는 것으로 끝나므로, 결국 URL을 고쳐야 한다. Chromium 계열은 DevTools Issues 탭에, Firefox·Safari는 콘솔에 막히거나 업그레이드된 리소스를 남긴다.

정리

  • HTTPS는 보안·SEO·최신 API 사용의 전제다.
  • 웹사이트 인증서는 DV면 충분하다. EV의 시각적 이점은 사라졌다.
  • 범위는 단일·다중(SAN)·와일드카드 중 고르고, 키는 ECDSA를 우선한다.
  • 발급·갱신은 ACME로 자동화한다. 유효 기간은 계속 짧아진다.
  • 설치로 끝나지 않는다. 혼합 콘텐츠, 301, HSTS, Secure 쿠키, TLS 설정까지 챙겨야 전환이 끝난다.

관련 노트: HTTPS와 TLS, 로컬 개발 환경에 HTTPS 적용하기, SEO 기초, 웹 서버, WAS, 그리고 Nginx, 프라이버시를 위한 암호화, 웹 PKI의 변천: 인증서 생태계는 왜 바뀌었나

원본 기록6

댓글

GitHub 계정으로 댓글을 남길 수 있어요.