CS/네트워크

HTTP & HTTPS

sun._.ny 2022. 8. 10. 00:20

HTTP (HyperText Transfer Protocol)

  • Hypertext인 HTML을 전송하기 위한 통신 규약
  • 서버와 클라이언트 간의 데이터를 주고 받는 프로토콜
  • 텍스트, 이미지, 영상, JSON 등등 거의 모든 형태의 데이터를 전송 가능함
  • 80번 포트 사용
  • 클라이언트가 서버에 요청을 보내고, 서버가 응답을 클라이언트에 보내면 바로 연결이 끊어짐 (비연결, Connectionless)
  • 연결을 끊는 순간, 클라이언트와 서버 간의 통신은 끝나며 상태 정보를 유지하지 않음 (무상태, Stateless)

 

 

 

 

◆ HTTP의 문제

 

1. 암호화 기능이 없음

서버에서부터 브라우저로 전송되는 정보가 암호화되지 않는다는 문제가 존재. 단순 text 형식으로 주고받기 때문에 중간에 누군가가 신호를 가로챈다면 내용이 그대로 노출됨

 

2. 통신 내용 변경 가능

요청을 보낸 곳과 받은 곳의 리소스가 정확히 일치하는지 확인할 수 없으므로, 누군가가 중간에 데이터를 가로채 악의적으로 변조한다면 정확한 데이터를 주고받을 수 없게 됨

 

3. 신뢰할 수 있는 사이트인지 확인 불가

통신하려는 사이트를 따로 확인하는 작업이 없어, 다른 사이트가 통신하려는 사이트로 위장이 가능함

 

 

 

 

 

 

 


HTTPS (HyperText Transfer Protocol Secure)

  • HTTP + SSL(Secure Socket Layer) = 보안이 강화된 HTTP
  • 서버와 클라이언트 간의 모든 통신 내용이 암호화됨
  • 개인 정보와 같은 민감한 데이터를 주고 받아야 한다면 HTTPS를 이용
  • 443번 포트 사용

* SSL = TLS(Transport Layer Security)

인터넷에서 정보를 암호화해서 송수신하는 프로토콜

 

 

 

 

 

◆ HTTPS의 동작 과정

 

HTTPS는 대칭키 & 비대칭키(공개키) 암호화를 모두 사용

 

HTTPS 연결과정(Hand-Shaking)에서 먼저 서버와 클라이언트 간에 세션키를 교환함

여기서 세션키는 주고 받는 데이터를 암호화하기 위해 사용되는 대칭키이며, 데이터 간의 교환에는 빠른 연산 속도가 필요하므로 세션키는 대칭키로 만들어짐

 

이 세션키를 클라이언트와 서버가 교환하는 과정에서 비대칭키가 사용됨

 

즉, 처음 연결을 성립하여 안전하게 세션키를 공유하는 과정에서 비대칭키가 사용되고,

이후에는 데이터를 교환하는 과정에서 빠른 연산 속도를 위해 대칭키가 사용되는 것