Foundry
네트워크
중급
핵심

HTTPS와 TLS

SSL/TLS 핸드셰이크, 인증서, 암호화

HTTPS와 TLS

HTTP + TLS(SSL) = HTTPS. 통신 내용을 암호화하여 도청과 변조를 방지한다.

HTTP vs HTTPS

[HTTP] 평문 전송
Client ──"비밀번호: 1234"──→ Server
         ↑ 해커가 도청 가능!

[HTTPS] 암호화 전송
Client ──"x7$k!2@f..."──→ Server
         ↑ 해커: 해독 불가 🔒
구분HTTPHTTPS
포트80443
암호화없음TLS 사용
인증서불필요필요 (CA 발급)
SEO불리유리
속도빠름약간 느림 (핸드셰이크)

TLS 핸드셰이크

단계방향내용
1클라이언트에서 서버로ClientHello. 지원하는 암호 목록을 보낸다
2서버에서 클라이언트로ServerHello. 선택된 암호를 알린다
3서버에서 클라이언트로인증서. 공개키가 들어 있다
4클라이언트에서 서버로키 교환. Pre-Master Key 를 전달한다
5양쪽각자 세션키를 만든다
6양방향세션키로 암호화한 통신을 시작한다

대칭키 vs 비대칭키

구분대칭키비대칭키
1개 (같은 키)2개 (공개+비밀)
속도빠름느림
용도데이터 암호화키 교환, 서명
예시AESRSA, ECDSA
TLS는 둘 다 사용!

1. 비대칭키로 세션키 안전하게 교환
2. 세션키(대칭키)로 실제 데이터 암호화
→ 보안 + 성능 둘 다 확보

인증서와 CA

[인증 체인]
Root CA (신뢰의 근원)
  ↓ 서명
Intermediate CA
  ↓ 서명
서버 인증서 (example.com)

브라우저: Root CA 목록 내장
→ 체인 검증 → 신뢰 확인
  • CA (Certificate Authority): 인증서 발급 기관
  • Let's Encrypt: 무료 CA (자동 갱신)
  • 인증서 내용: 도메인, 공개키, 만료일, CA 서명

실무 체크리스트

항목설명
HTTPS 리다이렉트HTTP → HTTPS 301
HSTS 헤더브라우저에 HTTPS 강제
Mixed ContentHTTP 리소스 차단
인증서 자동 갱신Let's Encrypt + certbot
TLS 버전1.2 이상 필수 (1.0/1.1 폐기)
면접에서 이렇게 나옵니다

Q.HTTPS의 동작 원리를 설명해주세요.

HTTP 를 TLS 위에 올려 암호화와 신원 확인을 더한 것입니다.

단계하는 일
1서버 인증서를 받아 신뢰할 수 있는 기관이 발급했는지, 도메인이 맞는지, 만료되지 않았는지 확인한다
2비대칭 연산으로 양쪽이 같은 대칭키를 안전하게 만든다
3그 대칭키로 이후 데이터를 암호화한다

이 구조가 주는 것은 셋입니다.

성질내용
기밀성중간에서 내용을 읽을 수 없다
무결성중간에서 바꾸면 검증에 실패한다
인증상대가 그 도메인의 주인인지 확인한다

세 번째가 없으면 암호화는 무의미합니다. 공격자와 안전하게 통신하는 셈이기 때문입니다.

흔한 실수: 암호화만 설명하고 인증을 빼는 것. HTTPS 가 뚫리는 실제 사례는 대부분 인증 단계(인증서 검증 무시, 루트 인증서 설치, 첫 접속이 평문)에서 생깁니다.

Q.HTTP와 HTTPS 차이를 설명해주세요

전송 구간에 TLS 가 있는지가 다릅니다.

항목HTTPHTTPS
암호화없다. 평문있다
신원 확인없다인증서로 확인
기본 포트80443
연결 비용없음핸드셰이크 왕복이 추가된다
검색과 브라우저경고 표시, 순위 불이익기본 요구사항

평문이면 같은 네트워크에 있는 누구나 내용을 볼 수 있고, 중간에서 바꿔치기도 됩니다. 공용 와이파이에서 로그인 정보가 새는 것이 이 경우입니다.

성능 걱정은 지금은 거의 근거가 없습니다. TLS 1.3 은 1왕복이고 세션 재사용으로 0왕복도 가능하며, 암복호는 하드웨어 가속을 받습니다. HTTP/2 와 HTTP/3 는 사실상 HTTPS 에서만 쓰여 오히려 더 빠릅니다.

흔한 실수: HTTPS 를 "비밀번호 페이지만" 적용하는 것. 다른 페이지의 쿠키가 평문으로 오가면 세션이 탈취됩니다. 전 구간 적용과 HSTS 가 기본입니다.

Q.TLS 핸드셰이크 과정을 설명해주세요.

단계방향내용
1클라이언트에서 서버로지원하는 암호 목록과 무작위 값을 보낸다
2서버에서 클라이언트로쓸 암호를 고르고 인증서와 무작위 값을 보낸다
3클라이언트인증서를 검증한다. 발급 기관, 도메인, 만료, 폐기 여부
4양쪽키 교환 값을 주고받아 같은 대칭키를 각자 계산한다
5양쪽지금까지의 대화가 조작되지 않았는지 확인하고 암호화 통신을 시작한다

TLS 1.2 는 2왕복, TLS 1.3 은 1왕복입니다. 1.3 에서 줄어든 이유는 선택지를 줄여 클라이언트가 첫 메시지에 키 교환 값을 미리 실어 보낼 수 있게 했기 때문입니다.

4단계에서 매 연결마다 임시 키를 만드는 방식이 표준입니다. 서버 개인키가 나중에 유출돼도 과거 통신은 복호화되지 않습니다.

흔한 실수: 서버 공개키로 대칭키를 암호화해 보낸다고만 설명하는 것. 그 방식은 과거 통신 보호가 안 되어 TLS 1.3 에서 제거됐습니다.

Q.대칭키와 비대칭키 암호화의 차이는?

항목대칭키비대칭키
하나를 공유공개키와 개인키 한 쌍
속도빠르다수백에서 수천 배 느리다
키 전달 문제있다. 안전하게 줄 방법이 필요없다. 공개키는 공개해도 된다
용도대량 데이터 암호화키 교환, 전자 서명
AES, ChaCha20RSA, 타원곡선

비대칭키가 푼 문제는 처음 만난 상대와 사전 공유 없이 공통 비밀을 만드는 것입니다. 그 문제만 풀고 바로 대칭키로 넘깁니다.

전자 서명은 방향이 반대입니다. 개인키로 서명하고 공개키로 검증하므로 "이 사람이 보냈다"를 증명합니다. 인증서가 이 원리로 동작합니다.

흔한 실수: 비대칭키가 더 안전하다고 답하는 것. 같은 보안 강도 기준으로는 대칭키가 훨씬 짧은 키로 같은 강도를 냅니다. 안전성 차이가 아니라 역할 분담입니다.

Q.인증서(CA)의 역할은 무엇인가요?

이 공개키가 이 도메인의 것임을 제3자가 보증하는 것입니다.

인증서에 담긴 것
  도메인 이름
  공개키
  발급 기관과 유효 기간
  발급 기관의 서명

브라우저는 발급 기관의 공개키로 서명을 검증합니다. 그 기관의 인증서도 상위 기관이 서명했고, 이 사슬을 따라 올라가면 브라우저나 운영체제에 미리 설치된 루트 인증서에 닿습니다.

인증 기관이 없으면 공개키를 받아도 그것이 진짜 그 서버의 것인지 알 수 없습니다. 중간에서 자기 공개키로 바꿔치기하면 그대로 통합니다.

검증 항목실패하면
서명 사슬신뢰할 수 없는 발급자 경고
도메인 일치도메인 불일치 경고
유효 기간만료 경고
폐기 여부폐기된 인증서 경고

흔한 실수: 인증서가 암호화를 한다고 답하는 것. 암호화는 대칭키가 하고, 인증서는 신원 보증과 공개키 전달을 합니다.

Q.HTTP/1.1 vs HTTP/2 주요 차이점은?

연결을 어떻게 쓰는지가 다릅니다.

항목HTTP/1.1HTTP/2
요청 처리한 연결에서 하나씩 순서대로한 연결에 여러 스트림을 동시에
앞 막힘응용 계층에서 발생응용 계층에서는 해결
헤더매번 전체 전송압축하고 이전과 겹치는 부분을 생략
서버 푸시없음있었으나 실효가 적어 사실상 폐기
연결 수도메인당 6개 안팎을 열어 우회하나로 충분

HTTP/1.1 에서 병렬을 얻으려고 도메인을 쪼개 연결 수를 늘리는 기법을 썼는데, HTTP/2 에서는 오히려 역효과입니다.

다만 HTTP/2 에도 남는 문제가 있습니다. TCP 계층에서 패킷이 유실되면 무관한 스트림까지 기다립니다. 이것을 없애려고 HTTP/3 가 UDP 기반 QUIC 으로 갔습니다.

흔한 실수: HTTP/2 가 앞 막힘을 완전히 없앴다고 답하는 것. 응용 계층에서는 해결했지만 전송 계층에서는 남습니다.

먼저 스스로 답해보고 아래 답변과 견줘보세요. 막히는 부분은 문제로 확인할 수 있어요.

더 깊이 공부하기

읽었으면 문제로 확인해보세요

네트워크 문제를 풀면 틀린 문제가 자동으로 노트에 쌓입니다. 가입 없이 5문제를 먼저 풀어볼 수도 있어요.