본문 바로가기
❤️‍🔥TIL (Today I Learned)

[TIL] 2022-11-28(21day)

by elicho91 2022. 11. 28.

HTTP, HTTPS


👉 HTTP(HyperText Transfer Protocol)

 # 클라이언트와 서버 간의 자원을 교환하기 위한 TCP/IP 기반 통신 프로토콜(규약, 약속)

 

* 특징 : 

 - 단방향성 : 서버가 먼저 응답을 보낼 수 없고 클라이언트가 요청을 보내야만 응답할 수 있다.

 - 비연결성 : 클라이언트의 요청으로 서버와 연결된 후, 요청에 대한 응답의 데이터를 전송하면 연결을 종료.

                     (실시간 통신을 할 수 없다.)

 

* 문제점

 -  HTTP는 평문 통신이기 때문에 도청이 가능.

 - 통신 상대가 검증된 상대인지 확인하지 않기 때문에 위장이 가능.

 - 통신 상대가 검증된 상대인지 확인하지 않기 때문에 위장이 가능.

 

 

👉 HTTP 메소드(Method)

# HTTP 메소드는 클라이언트가 웹 서버에게 요청의 목적이나 종류를 알리는 수단

 

* 주요 메서드

 - GET : 보통 `리소스를 조회`할 때 사용하며, 서버에 전달하고 싶은 `데이터는 query를 통해서 전달`한다. 메시지 바디를 사용해서 데이터를 전달할 수는 있지만, 지원하지 않는 곳이 많아서 권장하지 않는다.
 - POST : 주로 `리소스를 새롭게 생성`할 때 사용하며, 서버에 전달하고 싶은 `데이터는 메시지 바디를 통해 전달`.
 - PUT : `리소스가 있으면 대체`하고 `리소스가 없으면 생성`한다. 즉, 데이터를 덮어쓴다.
 - PATCH : PUT과 마찬가지로 리소스를 수정할 때 사용하지만, PATCH는 `리소스를 일부분만 변경`할 때 사용.
 - DELETE : `리소스를 제거`할때 사용.

 

* 메소드 속성

 - 안전(Safe Methods) : 계속 호출해도 리소스를 변경하지 않는 특성
- 멱등(Idempotent Methods) : 동일한 요청을 여러 번 보내도 한 번 보내는 것과 똑같은 결과를 갖는 것
    Get, PUT, DELETE는 멱등하다고 볼 수 있지만, POST나 PATCH는 멱등하다고 볼 수 없다.  
- 캐시가능(Cacheable Methods) : 응답 결과를 서버에 캐시 해서 사용해도 되는 메소드
    GET, HEAD, POST, PATCH가 캐시가 가능하지만 구현이 어려워 실제로는 GET과 HEAD만 주로 캐싱이 쓰임.

 

 

👉 HTTP 통신흐름

1. 웹 브라우저에 www.naver.com 입력.
2. 사용자가 입력한 URL 주소 중 **도메인 네임 부분을 DNS 서버에 검색**하고, DNS서버에서 해당 도메인 네임에 해당하는 **IP주소를 찾아온다.**
3.  HTTP 프로토콜을 사용하여 페이지 URL정보와 찾아온 IP주소를 포함하는 **HTTP 요청 메세지를 생성**하고, 생성된 HTTP 요청 메세지는 **TCP 프로토콜을 사용하여 인터넷 망을 통해 해당 IP주소의 컴퓨터로 전송**된다.
4. HTTP 요청 메세지를 받은 컴퓨터(서버)는 **웹 페이지 URL 정보 중 PATH와 HTTP Method에 맞는 액션을 취한다.** (여기서는 naver 페이지를 띄우기 위해 필요한 html 등의 리소스를 찾을 것이다.)
5. 생성된 응답 데이터는 또 다시 HTTP 프로토콜을 사용하여 **HTTP 응답 메세지로 만들어지고** TCP 프로토콜을 사용하여 인터넷 망을 통해 **요청했던 컴퓨터(클라이언트)로 전송**된다.
6. 도착한 HTTP 응답 메세지는 웹 브라우저에 의해 브라우저 렌더링 과정을 거쳐 화면에 출력되어 **사용자가 볼 수 있게 된다.

 

# 브라우저 렌더링 과정

1~4. HTML 파일과 CSS 파일을 파싱해서 DOM Tree*, CSSOM Tree*를 만든다. (Parsing)
5. 두 Tree를 결합하여 Rendering Tree*를 만든다. (Style)
6. Rendering Tree에서 각 노드의 위치와 크기를 계산한다. (Layout)
7. 계산된 값을 이용해 각 노드를 화면상의 실제 픽셀로 변환하고, 레이어를 만든다. (Paint)
8. 레이어를 합성하여 실제 화면에 나타낸다. (Composite)

 

# DOM Tree, CSSOM Tree, Render Tree


👉 HTTPS : HTTP(HyperText Transfer Protocol)의 보안(Secured)버전

 # SSL/TLS 프로토콜을 사용해 HTTP를 암호화하여 주고 받을 때 쓰는 통신 프로토콜

 

 # 대칭키

  - 암호화, 복호화에 사용되는 키가 동일하다.

  - 대표적인 알고리즘으로는 DES, 3DES, AES, SEED, ARIA 등
  - 비대칭키 : 암호화, 복호화에 사용되는 키가 다르다.

  - 장점 : 수행 시간이 짧음
  - 단점 : 안전한 키교환 방식이 요구됨, 사람이 증가할수록 키관리가 어려워짐

 

 # 비대칭키 (전자 서명, 메세지 송신에 주로 사용)

  - 암호화, 복호화에 사용되는 키가 다르다.
  - 장점 : 보안성이 뛰어나다
  - 단점 : 구현하기가 어렵고 암호화 및 복호화 속도가 느리다.

 

# SSL/TLS Handshake

0. 서비스를 서빙하는 서버가 CA로부터 CA 인증서를 발급받는다. [인증서 기간 만료까지 1회성]

서비스를 서빙하는 서버는 CA에 자신의 도메인 정보와 서버 측 공개 키를 보낸다.

 

인증기관은 받은 두 데이터를 자신의 개인키로 암호화한 CA 인증서를 서버로 보낸다.
브라우저에서 도메인을 쳐서 요청을 보내 클라이언트(브라우저)와 서버가 TCP 연결을 맺는다.
서버는 브라우저가 보내준 Cipher Suite 중 하나를 고르고, 자신의 SSL/TLS 프로토콜 버전을 브라우저에게 알리면서, 서버 자신의 도메인에 대한 CA 인증서를 보낸다.
브라우저는 브라우저에 내장된 CA의 공개 키를 이용하여 CA 인증서를 복호화하여 인증서가 유효한지 검증한 후, 서버 측의 공개 키를 얻는다.
브라우저는 앞으로 서버와 통신하는데 있어 암호화를 위해 사용할 대칭 키를 만들고, 그 대칭 키를 사이트 공개 키로 암호화하여 서버로 보낸다.

 

서버는 자신의 개인 키를 사용하여 암호화된 것을 복호화하여 사용자 대칭 키를 얻어 낸다.
이렇게 얻은 대칭 키를 활용하여 서버와 클라이언트가 서로 데이터를 안전하게 암/복호화 하면서 통신할 수 있게 된다.


🙋‍♂️ 소감 : 

HTTP와 HTTPS의 차이점이 단순히 보안성이라고는 단순히 알고 있었는데,

개념적인 부분을 배울 수 있는 강의여서 좋았다.

검색해보니 구글은 계속해서 HTTP 를 HTTPS로 교체하고 있고,

크롬의 주소창 앞에 붙은 자물쇠 모양의 아이콘이 HTTPS 때문이라는걸 알게 되었다.ㅎㅎ 

😈 아는 내용이라고 그냥 넘어가지 않기! 😈

'❤️‍🔥TIL (Today I Learned)' 카테고리의 다른 글

[TIL] 2022-11-30(23day)  (0) 2022.11.30
[TIL] 2022-11-29(22day)  (0) 2022.11.29
[TIL] 2022-11-25(20day)  (0) 2022.11.27
[TIL] 2022-11-24(19day)  (0) 2022.11.24
[TIL] 2022-11-23(18day)  (0) 2022.11.23

댓글