Network

[Web] HTTP와 HTTPS

프로그래민 2021. 12. 9. 21:02
반응형

HTTP (Hypertext Transfer Protocol)

HTTP란

HTTP는 Hypertext Transfer Protocol의 줄임말로써 웹 서비스에서 클라이언트와 서버 간에 데이터를 통신하기 위해 사용되는 프르토콜이다. 즉 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약으로 80번 포트를 사용하고 있다. HTTP 서버가 80번 포트에서 요청을 기다리며 클라이언트는 80번 포트로 요청을 보내게 된다. 인터넷의 초기에 모든 웹 사이트에서 기본적으로 사용되었던 프로토콜이다.

 

HTTP 특징 (HTTP1.0 기준)

HTTP는 초기버전인 1.0 기준 대표적으로 Stateless, Conncetionless의 특징을 가지고 있다.

  • Stateless(무상태) : 서버는 클라이언트의 상태를 저장하지 않는다. 즉, 서버는 클라이언트의 상태에 대해 알고 있지 않다는 성질이다. 서버가 클라이언트의 상태를 저장하게 되면 서버의 상태를 공유하는데 드는 비용이 커지게 되는 단점이 있고, 또한 여러대로 서버를 확장시키는 구조도 가질 수 없게 된다. 이러한 특징에서 가져오는 단점을 극복하기 위해 쿠키, 세션 또는 OAuth, JWT 등을 활용할 수 있다.
  • Connectionless(비연결성) : HTTP 통신은 연결을 유지하지 않는 것을 기본 동작으로 가진다. 즉, 클라이언트와 서버가 한번 연결을 맺은 후, 클라이언트의 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어버리는 성질이다. 응답후 연결을 끊어버리기에 더많은 연결을 처리할 수 있다는 장점이 있지만, 동일한 클라이언트에서 계속 요청을 하는 경우 연결과 연결해제에 대한 오버헤드가 발생하는 단점이 있다. 단 HTTP1.1 부턴 KeepAlive 기능을 이용하여 단점을 극복할 수 있다.
KeepAlive : HTTP1.1 부터 제공하는 기능으로써 HTTP의 Connectionless를 극복하게 해주는 기능이다. TCP 연결을 재사용하는 기능으로써 Handshake 과정이 생략되어 성능 향상을 가져다 줄수 있다.

 

HTTP 구조

HTTP 구조

HTTP는 행위를 나타내는 Method, 그리고 경로를 나타내는 Path, 그리고 HTTP의 Version, 마지막으로 정보들을 담고 있는 Headers, Body로 구성되어 있다.

HTTP는 암호화가 되지 않는 평문 데이터를 전송하는 프로토콜이다. 따라서 HTTP로 서버와 클라이언트가 데이터를 주고 받는 경우 정보가 암호하되지 않고 제3자가 보거나, 도난당할 수 있는 단점이 있다. 이것을 극복하기 위해 SSL을 사용한 HTTPS가 나오게 되었다.

 

HTTPS (Hypertext Transfer Protocol Secure)

HTTPS란

HTTPS는 Hypertext Transfer Protocol Secure의 줄임말로써 기존 웹 서비스에서 클라이언트와 서버 간에 데이터를 통신하는데 사용했던 프로토콜인 HTTP에서 SSL(Secure Socket Layer)을 사용하여 보안을 강화한 프로토콜이다. 즉, HTTP에 데이터 암호화가 추가된 프로토콜이다. HTTPS는 HTTP와 다르게 443번 포트를 사용하며 네트워크 상에서 중간에 제3자가 정보를 볼 수 없도록 공개키 암호화를 지원하고 있다.

SSL : Secure Socket Layer로써 TLS의 업그레이드 버전이며 데이터를 암호화하는 보안기능을 가지고 있는 보안인증서이다. CA(Certificate Authority)라 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용한다.

 

HTTPS 동작과정

HTTPS는 SSL과 같은 프로토콜을 사용하여 공개키(비대칭키)를 기반으로 데이터를 암호화한다. 데이터는 암호화되어 전송되기 때문에 임의의 사용자가 데이터를 조회해도 원본을 볼 수가 없다. 서버는 클라이언트가 요청을 보낼때 암호화를 하기 위한 공개키를 생성해야 하는데, 이때 CA에게 공개키를 전송하여 인증서를 발급 받는다. 다음과 같은 과정이다.

1. 클라이언트에서 랜덤데이터를 생성하여 서버로 보냄
2. 서버에서는 랜덤데이터 + 서버의 인증서를 클라이언트로 보냄 - handshake 완료
3. 서버로 부터 받은 인증서를 브라우저의 내장된 CA에게 인증을 함(비대칭키이용 : 브라우저-공개키, CA-개인키)
4. 복호화된 인증서를 통해 서버의 공개키를 얻음
5. 이후 서버의 공개키를 이용하여 서버와 리소스를 주고받음

보다 자세한 HTTPS의 내용은 링크를 통해 확인할 수 있다.

 

HTTP vs HTTPS

HTTP vs HTTPS

HTTPS는 HTTP에 비해 보안이 강화된 형태이다. 다만 암호화 복호화 과정에서 가져오는 속도저하가 있을 수 있지만 오늘날에는 CPU나 메모리 등의 발전으로 크게 차이가 없다. 또한 보안성 뿐만 아니라 검색엔진 최적화(SEO)에 있어서도 장점이 있기에 가능하다면 HTTPS를 사용하는 것이 좋을 수 있다.

 

 

출처
https://www.youtube.com/watch?v=H6lpFRpyl14
https://mangkyu.tistory.com/98
https://12bme.tistory.com/80
https://jwdeveloper.tistory.com/222
https://victorydntmd.tistory.com/286
https://kotlinworld.com/97
반응형

'Network' 카테고리의 다른 글

[Network] 리피터, 허브, 스위치, 라우터  (1) 2021.12.01
[Security] CSRF와 XSS  (0) 2021.03.05