본문 바로가기
Computer Science/Network

HTTP & HTTPS

by weero 2020. 8. 17.

HTTP(Hypertext Transfer Protocol)

- 인터넷 상에서 클라이언트와 서버가 지원을 주고 받을 때 쓰는 통신 규약이다.

- 서로 다른 시스템들 사이에서 통신을 주고받게 해주는 가장 기초적인 프로토콜이다.

- HTTP는 텍스트 교환이므로 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈가 존재한다.

- 이런 보안 문제를 해결해 주는 프로토콜이 HTTPS이다.

 

HTTPS(Hypertext Transfer Protocol Secure)   

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

- HTTPS는 http 메세지(텍스트)를 암호화 하는 것이다.

- HTTPS의 S는 Secure Socket, 보안 통신망을 말한다.

   - SSL은 서버와 브라우저 사이에 안전하게 암호화된 연결을 만들 수 있게 도와주고, 서버 브라우저가 민감한 정보를 주고 받을 때 도난당하는 것을 막아준다.

   - SSL 인증서 : 사용자가 사이트에 제공하는 정보를 암호화한다. (데이터를 암호로 바꿈)

- SSL 이외에도 TSL(전송 계층 보안) 프로토콜을 통해서도 보안을 유지한다.

   - TSL : 데이터 무결성을 제공하기 때문에 데이터가 전송 중에 수정되거나 손상되는 것을 방지하고, 사용자가 자신이 의도하는 웹사이트와 통신하고 있음을 입증하는 인증 기능도 제공한다. 

- HTTPS는 텍스트를 공개키 암호화 방식으로 암호화한다.

 

HTTPS 양방향 / 단방향

SSL에는 양방향 인증과 단방향 인증이 있다.

  • WEB 서버에만 서버의 인증서가 존재해서 웹브라우저를 사용하는 사용자가 해당 서버의 인증서를 확인하게 되는 경우 단방향 인증
  • 사용자 개인의 인증서가 서버에 전달되어서 서버가 사용자 개인을 인증하는 과정까지 거친다면 양방향 인증

 

HTTPS 통신 흐름

  1. 애플리케이션 서버(A)를 만드는 기업은 HTTPS를 적용하기 위해 공개키개인키를 만든다.
  2. 신뢰할 수 있는 CA 기업을 선택하고, 그 기업에게 내 공개키 관리를 부탁하며 계약한다.
  3. 계약 완료된 CA 기업은 해당 기업의 이름, A 서버 공개키, 공개키 암호화 방법을 담은 인증서를 만들고, 해당 인증서를 CA 기업의 개인키(=비밀키)로 암호화해서 A서버에게 제공한다.
  4. A서버는 암호화된 인증서를 갖게 되었다. 이제 A 서버는 공개키로 암호화된 HTTPS 요청이 아닌 요청이 오면, 이 암호화된 인증서를 클라이언트에게 건내준다.
  5. 클라이언트는 main.html 파일을 달라고 A 서버에게 요청했다고 가정하자. HTTPS 요청이 아니기 때문에 CA 기업이 A 서버의 정보를 CA 기업의 개인키(=비밀키)로 암호화한 인증서를 받게 된다.
  6. CA 기업의 공개키는 브라우저가 이미 알고 있다. (세계적으로 신뢰할 수 있는 기업으로 등록되어 있기 때문에, 브라우저가 CA 기업 리스트를 쭉 탐색해서, 공개키로 인증서를 해독한다.)
  7. 브라우저는 해독한 뒤 A 서버의 공개키를 얻게 되었다. 이제 A서버와 통신할 떄는 얻은 A서버의 공개키로 암호화해서 요청을 날리게 된다.

* CA란?

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

* 4 ~ 5번 : handshake 과정. (HTTPS 전송 전에 Request를 통해 받게 되므로)

 

 

HTTPS도 무조건 안전하지는 않다.

신뢰받는 CA 기업이 아닌 자체 인증서를 발급한 경우이다.

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

 

 

예시

웹 브라우저에서 보안을 위해 https://tistory.com 주소를 입력하고 엔터를 눌렀다. 그 때부터 페이지가 열릴 때까지 PC에서 일어나는 네트워크 과정을 설명해주세요.