Network - HTTP & HTTPS

김준영·2023년 2월 28일
0

CS공부

목록 보기
17/20

HTTP & HTTPS


HTTP란

인터넷 상에서 클라이언트와 서버가 자원(데이터)을 주고 받을 때 쓰는 통신 규약(프로토콜)

즉, HTTP는 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약으로, 80번 포트를 사용한다.

HTTPS란

인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용해 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약

즉, HTTPS는 HTTP에 데이터 암호화가 추가된 프로토콜이다.(공개키 암호화)

443번 포트를 사용한다.

HTTP 구조


HTTP는 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다. HTTP는 상태를 가지고 있지 않는 Stateless 프로토콜이며 Method, Path, Version, Headers, Body 등으로 구성된다.

암호화되지 않은 평문 데이터를 전송하는 프로토콜이기 때문에, 중요한 정보를 주고 받으면 제 3자가 정보를 조회할 수 있다. 그래서 HTTPS를 사용한다.

HTTPS 통신 흐름


  1. 애플리케이션 서버(A)를 만드는 기업은 HTTPS를 적용하기 위해 공개키와 개인키를 만든다.
  2. 신뢰할 수 있는 CA기업을 선택하고, 그 기업에게 내 공개키 관리를 부탁하며 계약한다.
  3. 계약 완료된 CA기업은 해당 기업의 이름, A서버 공개키, 공개키 암호화 방법을 담은 인증서를 만들고, 해당 인증서를 CA기업의 개인키로 암호화해서 A서버에게 제공한다.
  4. A서버는 암호화된 인증서를 갖게 되고, 이제 A서버는 A서버의 공개키로 암호화된 HTTPS요청이 아닌 요청이 오면, 이 암호화된 인증서를 클라이언트에게 건내준다.
  5. 클라이언트가 main.html 파일을 달라고 A서버에 요청하면, HTTPS요청이 아니기 때문에 CA기업이 A서버의 정보를 CA기업의 개인키로 암호화한 인증서를 받게 된다.
  6. 브라우저는 해독한 뒤 A서버의 공개키를 얻게 된다.
  7. 클라이언트가 A서버와 HandShaking 과정에서 주고받은 난수를 조합하여 pre-master-key(대칭키)를 생성한 뒤, A서버의 공개키로 해당 대칭키를 암호화하여 서버로 보낸다.
  8. A서버는 암호화된 대칭키를 자신의 개인키로 복호화하여 클라이언트와 동일한 대칭키를 획득한다.
  9. 이후 클라이언트-서버 사이의 통신을 할 때 주고받는 메세지는 이 대칭키를 이용하여 암호화, 복호화를 진행한다.

CA : Certificate Authority로, 공개키를 저장해주는 신뢰성이 검증된 민간기업

HTTPS도 무조건 안전한 것은 아님.(신뢰받는 CA기업이 아닌 자체 인증서 발급한 경우 등)

이때는 HTTPS지만 브라우저에서 주의 요함, 안전하지 않은 사이트 와 같은 알림으로 주의 받게 된다.


참조 : https://gyoogle.dev/blog/computer-science/network/HTTP%20&%20HTTPS.html, https://mangkyu.tistory.com/98

profile
ㅎㅎ

0개의 댓글