오늘은 웹에서 데이터를 안전하게 주고받을 수 있는 보안 프로토콜인 HTTPS에 대해 알아보려 한다.
HTTP에 대해서 알아보고 싶다면
2025.06.08 - [CS/네트워크] - Http(Hypertext Transfer Protocol)을 참고하면 된다.
HTTP(Hypertext Transfer Protocol)
HTTP(Hypertext Transfer Protocol)란?웹에서 데이터를 주고받기 위한 서버-클라이언트의 프로토콜 HTTP의 특징1. 상태가 없는(Stateless) 프로토콜 서버는 클라이언트의 상태나 정보를 따로 저장하지 않고,
jjangsudiary.tistory.com
HTTPS란?
HTTPS는 HTTP에 암호화 기술(SSL/TLS)을 추가한 보안 프로토콜이다.

클라이언트는 데이터를 전송하기 전, SSL/TLS 인증서를 전달받아 인증서의 진위를 검증한 후에 데이터를 암호화하여 전송한다.
그렇다면, SSL/TLS에 대해서 먼저 알아보자.
SSL/TLS
SSL(Secure Socket Layer)은 암호화 기반 인터넷 보안 프로토콜이다.
TLS(Transport Layer Security)는 통신에서 주고받는 개인정보와 데이터 보안의 안전을 위해 설계된
보안 프로토콜이다.
또한 TLS는 데이터의 기밀성(Privacy), 무결성(Integrity), 인증(Authentication)을 보장한다.
SSL과 TLS의 차이는 무엇일까요 ❓
라고 하면 사실 다르지 않다. 버전이 진화됨에 따라 SSL이 TLS라는 이름으로 바뀐 것!
다만 SSL은 오래된 기술이므로 보안상 더 이상 사용을 권장하지 않으며, TLS는 현재 보안 통신 표준으로 사용되고 있다.
클라이언트는 서버로 받은 SSL/TLS 인증서의 진위를 검증하고 handshake를 하여 데이터를 송수신하게 되는데,
handshake를 하는 과정에서는 비대칭키 암호화를
데이터 송수신 과정에서는 대칭키 암호화를 사용한다.
두 암호화 방식에 대해서 간단히 짚고 넘어가자!
대칭키 암호화 / 비대칭키 암호화
대칭키 암호화(Symmetric key cryptography)

- 대칭키 암호화는 송신자와 수신자가 같은 키를 공유하는 것이다. 즉 암호화와 복호화할 때 같은 키를 사용한다.
- 처리 속도가 빠르지만, 키가 노출될 경우 보안이 위험해질 수 있다.
- 대칭키 암호화에 쓰이는 알고리즘으로는 DES, AES 등이 있다.
비대칭키 암호화(Asymmetric key cryptography)

- 비대칭키(공개키) 암호화는 송신자와 수신자가 키를 공유하지 않고 다른 키를 사용하는 것이다.
1. 송신자는 수신자에게 메시지를 보내야 하므로, 수신자의 공개키를 확인한다.
2. 송신자는 수신자의 공개키로 메시지를 암호화하여 송신한다.
3. 수신자는 자신의 개인키로 암호문을 복호화한다.
- 보안성이 높지만, 대칭키 암호화에 비해 처리 속도가 느리다.
- 대표적으로 RSA 알고리즘을 사용하며, 이는 HTTPS에서도 공개키 알고리즘으로 사용된다! (추후 설명)
HTTPS의 통신 과정
설명해왔듯이, 데이터를 송수신하려면 가장 먼저 서버의 SSL/TLS 인증서를 검증해야 한다.
(편의상 SSL 인증서라고 하겠다.)
그렇다면 서버는 검증된 SSL 인증서를 가지고 있어야 한다!
1. 서버의 검증된 SSL 인증서 발급
1-1. 먼저 서버 관리자는 공개키/개인키 쌍을 생성하고, 공개키와 서버 정보를 CA(인증 기관)에 제출한다.
1-2. CA는 서버의 정보를 검증한 뒤, 서버의 공개키에 CA의 개인키로 전자 서명을 하여 SSL 인증서를 만든다.
1-3. 서명된 SSL 인증서는 서버에 전달된다.
다음은 클라이언트가 서버로 접속을 시도한 후의 과정들이다.
2. 클라이언트가 서버의 SSL 인증서를 검증
2-1. 클라이언트가 서버로 접속을 시도하면 서버는 CA의 공개키와 SSL 인증서를 전달한다.
2-2. 클라이언트는 CA 공개키로 SSL 인증서의 서명을 복호화한다.
2-3. 복호화에 성공하면 SSL 인증서도 CA로부터 발급된 것임을 검증한 것이고, 서버의 공개키도 진짜임을 확인한다.
2-4. SSL 인증서에서 서버의 공개키를 추출한다.
3. Handshake(세션키 교환)
3-1. 클라이언트(송신자)는 세션키(혹은 premaster secret)를 임의로 생성한다.
3-2. 클라이언트는 서버의 공개키로 세션키를 암호화(RSA 비대칭키 암호화)한다.
3-3. 클라이언트는 암호화된 세션키를 서버로 전송한다.
3-4. 서버는 자신의 개인키로 암호화된 세션키를 복호화한다.
3-5. 클라이언트와 서버는 동일한 세션키(대칭키)를 공유하게 된다.
4. 데이터 송수신
4-1. 클라이언트와 서버는 세션키로 데이터를 암호화해서 송신할 수 있다.
4-2. 클라이언트와 서버는 같은 세션키로 암호화된 데이터를 복호화하여 확인할 수 있다.
:)
출처
https://www.cloudflare.com/ko-kr/learning/ssl/what-is-ssl/
https://www.cloudflare.com/ko-kr/learning/ssl/transport-layer-security-tls/
https://velog.io/@ajm0718/HTTPS%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
'Computer Science > 네트워크' 카테고리의 다른 글
| [Network] CORS(Cross-Origin Resource Sharing, 교차 출처 리소스 공유) (0) | 2025.08.10 |
|---|---|
| [Network] REST / REST API / RESTful 이란? (1) | 2025.07.18 |
| [Network] OSI 7계층, TCP/IP 4계층 (1) | 2025.06.09 |
| [Network] HTTP(Hypertext Transfer Protocol) (0) | 2025.06.08 |
| [Network] 로드밸런싱(Load Balancing) (0) | 2025.05.30 |