HTTP (HyperText Transfer Protocol)
- 인터넷 상에서 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약
- HTTP는 텍스트 교환이므로 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈가 존재 → 이런 보안 문제를 해결해주는 프로토콜이 HTTPS
HTTPS
- 인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용하여 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약
- 텍스트를 공개키 암호화 방식으로 암호화 한다.
HTTPS 통신 흐름
- 애플리케이션 서버를 만드는 기업(A)은 HTTPS를 적용하기 위해 공개키와 개인키를 만든다.
- 신뢰할 수 있는 기업(CA)을 선택하여 그 기업에게 공개키 관리를 부탁하여 계약을 한다. (CA, Certificate Authority 공개키를 저장해주는 신뢰성이 검증된 민간기업)
- 계약 완료된 CA 기업은 해당 기억의 이름, A서버 공개키, 공개키 암호화 방법을 담은 인증서를 만들고 해당 인증서를 CA 기업의 개인키로 암호화하여 A 서버에게 제공
- A서버는 암호화된 인증서를 가지게 되어 A서버의 공개키로 암호화된 HTTPS 요청이 아닌 요청이 오면, 이 암호화된 인증서를 클라이언트에게 건내준다.
- 클라이언트가 main.html 파일으 달라고 A서버에 요청한다면, HTTPS 요청이 아니기에 CA 기업이 A서버의 정보를 CA기업의 개인키로 암호화한 인증서를 받게 된다. (CA 기업의 공개키는 신뢰할 수 있는 기업이라 브라우저가 이미 인증서를 탐색하여 해독이 가능)
- 브라우저는 해독한 뒤 A서버의 공개키를 얻게 됨
- 클라이언트가 A서버와 Handshaking 과정에서 주고받은 난수를 조합하여 pre master key를 생성한 뒤 A서버의 공개키로 해당 대칭키를 암호화하여 서버로 보낸다.
- A서버는 암호화된 대칭키를 자신의 개인키로 복호화하여 클라이언트와 동일한 대칭키를 획득
- 이후 클라이언트-서버 사이의 통신을 할 때 주고받는 메세지는 대칭키를 이용하여 암호화, 복호화를 진행
- HTTPS도 무조건 안전한 것은 아니며, CA 기업이 아닌 자체 인증서 발급한 경우 등은 브라우저에서 주의 요함, 안전하지 않은 사이트와 같은 알림으로 주의 받게 된다.
'기초 CS 정리' 카테고리의 다른 글
로드 밸런싱(Load Balancing) (0) | 2023.02.10 |
---|---|
TLS/SSL handshaking (0) | 2023.02.09 |
대칭키와 공개키 (0) | 2023.02.07 |
TCP/IP의 흐름제어, 혼합제어 (1) | 2023.02.05 |
TCP 3way handshake (0) | 2023.02.05 |