1. HTTP(Hyper Text Transfer Protocol)
- 서버와 클라이언트 간에 데이터를 주고받는 프로토콜이다.
- HTTP는 텍스트, 이미지, 영상, JSON 등등 거의 모든 형태의 데이터를 전송할 수 있다.
- HTTP는 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약으로, 80번 포트를 사용하고 있다. 따라서 HTTP 서버가 80번 포트에서 요청을 기다리고 있으며, 클라이언트는 80번 포트로 요청을 보내게 된다.
- HTTP는 1997년 만들어진 HTTP/1.1가 가장 보편화되어있으며, 현재는 HTTP/2를 거쳐 HTTP/3까지 개발된 상태다.
1-1. HTTP 구조
- HTTP는 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다.
- HTTP는 상태를 가지고 있지 않는 Stateless 프로토콜이며 Method, Path, Version, Headers, Body 등으로 구성된다.
- HTTP는 암호화가 되지 않은 평문 데이터를 전송하는 프로토콜이기 때문에, HTTP로 비밀번호나 주민등록번호 등을 주고받으면 제3자가 정보를 조회할 수 있다.
2. HTTPS(Hyper Text Transfer Protocol Secure)
- HTTP에 데이터 암호화가 추가된 프로토콜이다.
- HTTP와 다르게 443번 포트를 사용하며, 네트워크 상에서 중간에 제 3자가 정보를 볼 수 없도록 암호화를 지원하고 있다.
2-1. 대칭키 암호화와 비대칭키 암호화
- HTTP는 대칭키 암호화 방식과 비대칭키 암호화 방식을 모두 사용하고 있다
1) 대칭키 암호화
- 클라이언트와 서버가 동일한 키를 사용해 암호화/복호화를 진행
- 키가 노출되면 매우 위험하지만 연산 속도가 빠름
2) 비대칭키 암호화
- 1개의 쌍으로 구성된 공개키와 개인키를 암호화/복호화하는 데 사용
- 키가 노출되어도 비교적 안전하지만 연산 속도가 느림
- 공개키 : 모두에게 공개 가능한 키
- 개인키 : 나만 가지고 알고 있어야 하는 키
2-2. 암호화를 공개키로 하느냐 개인키로 하느냐에 따라 얻는 효과가 다름
- 공개키 암호화 : 암호화를 하면 개인키로만 복호화할 수 있다. -> 개인키는 나만 가지고 있으므로, 나만 볼 수 있다.
- 개인키 암호화: 개인키로 암호화하면 공개키로만 복호화할 수 있다. -> 공개키는 모두에게 공개되어 있으므로, 내가 인증한 정보임을 알려 신뢰성을 보장할 수 있다.
3. HTTPS의 동작 과정
- HTTPS는 대칭키 암호화와 비대칭키 암호화를 모두 사용하여 빠른 연산 속도와 안정성을 모두 얻고 있다.
- HTTPS 연결 과정(Hand-Shaking)에서는 먼저 서버와 클라이언트 간에 세션키를 교환한다. 여기서 세션키는 주고 받는 데이터를 암호화하기 위해 사용되는 대칭키이며, 데이터 간의 교환에는 빠른 연산 속도가 필요하므로 세션키는 대칭키로 만들어진다.
- 처음 연결을 성립하여 안전하게 세션키를 공유하는 과정에서 비대칭키가 사용되고, 이후에 데이터를 교환하는 과정에서 빠른 연산 속도를 위해 대칭키가 사용된다.
3-1. HTTPS 연결 흐름
- 클라이언트(브라우저)가 서버로 최초 연결 시도를 함
- 서버는 공개키(엄밀히는 인증서)를 브라우저에게 넘겨줌
- 브라우저는 인증서의 유효성을 검사하고 세션키를 발급함
- 브라우저는 세션키를 보관하며 추가로 서버의 공개키로 세션키를 암호화하여 서버로 전송함
- 서버는 개인키로 암호화된 세션키를 복호화하여 세션키를 얻음
- 클라이언트와 서버는 동일한 세션키를 공유하므로 데이터를 전달할 때 세션키로 암호화/복호화를 진행함
3-2. HTTPS 발급 과정
- A기업은 HTTP 기반의 애플리케이션에 HTTPS를 적용하기 위해 공개키/개인키를 발급함
- CA 기업에게 돈을 지불하고, 공개키를 저장하는 인증서의 발급을 요청함
- CA 기업은 CA기업의 이름, 서버의 공개키, 서버의 정보 등을 기반으로 인증서를 생성하고, CA 기업의 개인키로 암호화하여 A기업에게 이를 제공함
- A기업은 클라이언트에게 암호화된 인증서를 제공함
- 브라우저는 CA기업의 공개키를 미리 다운받아 갖고 있어, 암호화된 인증서를 복호화함
- 암호화된 인증서를 복호화하여 얻은 A기업의 공개키로 세션키를 공유함
'Network' 카테고리의 다른 글
[Network]Telnet & SSH (0) | 2022.05.27 |
---|---|
[Network] FTP, FTPS, SFTP (0) | 2022.05.20 |
공공기관용 IPSEC VPN 소개 (0) | 2022.05.12 |
[Network] Protocol (0) | 2022.05.06 |
[NetworkTCP & UDP (0) | 2022.04.29 |
댓글