2026년 8월 15일

GitHub Pages의 Enforce HTTPS 동작 원리와 4계층 네트워크

인증서 설정 없이 HTTPS가 동작하는 이유

GitHub Pages에 커스텀 도메인(예: my-site.com)을 연결하면 저장소 설정 화면에서 Enforce HTTPS 옵션을 활성화할 수 있습니다.

[ GitHub Pages Settings ]
[x] Enforce HTTPS - HTTPS enforces encrypted connections to your site.

직접 SSL/TLS 인증서를 구매하거나 서버에 인증서 파일을 설치하지 않았음에도, 체크박스를 켜는 것만으로 http:// 접속이 https://로 전환되고 브라우저 주소창에 보안 자물쇠가 표시됩니다.

체크박스 하나 뒤에서 브라우저와 GitHub 인프라 사이에 일어나는 네트워크 처리 과정을 4단계 계층으로 나누어 살펴보겠습니다.


브라우저가 페이지를 가져오는 4단계 네트워크 계층

웹사이트에 접속할 때 브라우저는 다음 4단계 네트워크 계층을 순서대로 거칩니다.

한눈에 보기다이어그램
다이어그램 렌더링 중...

체크박스를 켰을 때 변경되는 동작은 각 계층마다 명확히 나뉘어 있습니다.


1단계: DNS는 IP 주소만 안내할 뿐 암호화는 관여하지 않습니다

도메인 네임서버에 등록한 DNS 레코드는 단순합니다.

my-site.com.   A   185.199.108.153
my-site.com.   A   185.199.109.153

이 레코드가 나타내는 내용은 단순합니다.

my-site.com이라는 도메인을 가진 서버는 GitHub의 IP 185.199.108.153에 위치해 있습니다.

DNS 레코드에는 80번(HTTP) 포트를 쓸지, 443번(HTTPS) 포트를 쓸지, 통신을 암호화할지에 대한 정보가 포함되어 있지 않습니다.1
따라서 http://로 접근하든 https://로 접근하든, DNS는 동일한 GitHub 서버의 IP 주소를 반환합니다.


2단계: TCP와 HTTP, 301 리다이렉트 처리

사용자가 주소창에 http://my-site.com을 입력하면 브라우저는 GitHub 서버의 80번 포트(평문 HTTP)로 TCP 연결을 맺고 요청을 전송합니다.

GET /posts/1 HTTP/1.1
Host: my-site.com

GitHub의 프록시 웹 서버는 Host: my-site.com 헤더를 확인하고 해당 저장소의 설정을 조회합니다.
이때 Enforce HTTPS 옵션이 켜져 있다면, GitHub는 HTML 페이지를 바로 반환하는 대신 브라우저에 301 Moved Permanently 리다이렉트 응답을 내려줍니다.2

HTTP/1.1 301 Moved Permanently
Location: https://my-site.com/posts/1
한눈에 보기다이어그램
다이어그램 렌더링 중...

Enforce HTTPS는 서버의 암호화 방식을 새로 켜는 것이 아니라, 80번 포트로 들어온 평문 요청을 443번 포트로 전달하는 리다이렉트 정책입니다.


3단계: TLS 인증서의 자동 발급 및 갱신

그렇다면 443번 포트로 들어온 브라우저에게 건넬 TLS 인증서는 어떻게 준비되는 것일까요?

GitHub Pages는 커스텀 도메인이 등록되면 백그라운드에서 인증서 발급 파이프라인을 실행합니다.3

한눈에 보기다이어그램
다이어그램 렌더링 중...

GitHub가 무료 공용 인증기관인 Let's Encrypt와 통신하여 해당 도메인의 TLS 인증서를 대신 발급받고, 유효기간 갱신까지 자동으로 처리합니다.4

커스텀 도메인을 처음 연결했을 때 체크박스가 즉시 켜지지 않고 잠시 대기 상태로 머무는 이유도, 이 DNS 검증과 인증서 발급 및 전 세계 엣지 배포 작업이 진행되기 때문입니다.


4단계: TLS Termination과 정적 파일 서빙

저장소 내부의 index.html 같은 정적 파일들이 암호화 로직을 알 필요가 없는 이유는 TLS Termination 구조 때문입니다.

[브라우저] 
   │ 🔒 TLS 암호화 구간 (공용 인터넷 망)

[GitHub Edge 프록시]     <-- Edge에서 인증서로 복호화 (TLS Termination)


[GitHub Pages 스토리지]  <-- 정적 HTML/CSS 파일을 그대로 읽어 전달

브라우저와의 암호화 핸드셰이크 및 데이터 복호화는 최전방의 GitHub Edge 프록시가 전담합니다. 엣지 서버가 암호화 계층을 처리한 뒤 내부 저장소에서 정적 파일을 꺼내 전달하므로, 개발자는 일반적인 정적 파일만 관리하면 됩니다.


계층별 동작 요약

계층역할실제 동작
1. DNS서버 위치 조회도메인 이름을 GitHub의 공용 IP로 변환
2. TCP포트 접속80번(HTTP) 또는 443번(HTTPS) 포트 연결
3. TLS보안 검증 및 암호화Let's Encrypt 자동 발급 인증서로 핸드셰이크
4. HTTP리소스 전달80번이면 301 Redirect, 443번이면 웹페이지 응답

참고 자료

KHLogo