Network

HTTP와 HTTPS란? 암호화란?

oneyenee 2022. 10. 10. 16:35

HTTP (HyperText Transfer Protocol)

텍스트 기반의 통신규약. 인터넷에서 데이터를 주고 받을 수 있는 프로토콜이다.

규약을 정해두었기 때문에 규약에 맞춰 개발하면 서로간의 통신을 할 수 있게해준다.

 

HTTP의 특징

  • 클라이언트에서 Request가 발생하면 서버에서 Response 하는 형태로 동작된다.
  • TCP/IP를 이용하는 응용 프로토콜이다.
  • 연결상태를 유지하지 않는 비연결성(Connectionless) 프로토콜이다.
  • 서버와 연결이 끊기는 순간 통신이 끝나며, 연결의 상태 정보를 유지하지 않는 무상태(Stateless) 특성이 있다.

 

HTTP 요청(Request)의 종류

HTTP는 클라이언트와 서버의 Request - Response 의 형태로 동작된다고 앞서 이야기했다.

그럼 HTTP로 요청을 하는 방법, 종류에 대해 알아보자.

 

  • GET : 자료를 요청
  • POST : 자료를 생성
  • PUT : 자료를 수정
  • DELETE : 자료를 삭제

서버는 HTTP가 요청하는 내용에 대해서 자료를 어떻게 해달라는 것인지에 대한 정보가 필요하다. 그래서 HTTP를 요청할 때는 위와 같이 4가지 요청의 종류에 따라 Request 해야한다.

 

반대로 응답(Response)는 어떻게 돌아올까?

 

HTTP 응답(Response)의 종류

서버는 클라이언트에게 상태에 대한 응답을 상태코드로 보낸다.

웹 개발을 하는 사람, 웹을 이용하는 사람 가릴 것 없이 대표적으로 404 와 같은 오류 화면에 뜬 상태코드를 본 적이 있을 것이다.

상태코드에 따른 오류는 사실 무진장 많다. 그중에서도 대표적으로 분류되는 상태코드 5가지만 정리해보려고 한다.

 

  • 1XX(조건부 응답) : 요청을 받았고, 작업이 진행중이다.
  • 2XX(성공) : 작업이 성공적으로 완료되었다.
  • 3XX(리다이렉션 완료) : 클라이언트의 요청이 완전히 완료가 되기 위해선 클라이언트의 추가 동작이 취해져야 한다.
  • 4XX(클라이언트 오류) : 클라이언트의 요청이 올바르지 않다.
  • 5XX(서버 오류) : 서버가 요청을 수행하지 못했다.

 

HTTP의 한계

그런데 HTTP에는 치명적인 문제가 있다. 그저 텍스트의 교환일 뿐이기 때문에 보안이 중요한 21세기에서 비밀번호와 같은 개인정보를 HTTP를 통해 전달을 하게되면 네트워크 안에 누군가 신호를 가로챘을 때 그 안의 텍스트를 그대로 볼 수 있다. 보안의 문제점이 생기는 것이다! 이러한 문제를 보완하기 위해 HTTPS가 나타났다.

 

 


HTTPS  (Hypertext Transfer Protocol Secure)

클라이언트와 서버사이에서 전송되는 사용자 데이터의 무결성과 기밀성을 유지할 수 있게 해주는 인터넷 통신 프로토콜이다.

내 블로그에도 HTTPS가 쓰인다.

URL를 입력하는 란 왼쪽에 자물쇠모양을 누르면 HTTPS가 사용되고 있는지 확인이 가능하다.

사실 요즘은 HTTP화면일 때 크롬을 사용하면 개인정보가 유출될 수도 있다는 안내가 보이기도 한다. 그만큼 보안이 중요해졌다는 것 아닐까.. 아무튼

HTTP와 HTTPS는 S = Secure 가 추가된 이름처럼 보안이 가장 큰 차이점을 보인다.

 

HTTP에 Secure Socket이 추가된 형태로 기존 HTTP통신에 SSL 혹은 TLS프로토콜을 조합하여 세션데이터를 암호화하는 프로토콜이다.

 

HTTP와 사용하는 포트번호도 다르다. (HTTP - 80 / HTTPS - 433)

 

HTTP가 TCP와 직접 통신하는 프로토콜이었다면

HTTPS는 HTTP -> SSL -> TCP 순서로 통신하는 프로토콜이다.

 

HTTPS의 암호화 방식

암호화에 대해서 얘기하기 전에 먼저 정리하고 가야하는 개념이 있다.

 

암호화 : 평문을 암호문으로 변환하는 기술

복호화 : 암호문을 평문으로 변환하는 기술

 

암호화의 종류에는 두가지 종류가 있다.

  • 단방향 암호화 : 암호화 후 복호화를 할 수 없다. ex) 사용자의 비밀번호. 사용자가 입력한 비밀번호를 암호화하여 DB에 저장하면, 모든 DB접근자들은 암호화된 PW를 평문으로 복호화 할 수 없다. 그래서 비밀번호 찾기를 해도 내 비밀번호를 알려주지않고 새로운 비밀번호를 입력하게끔 만드는 것이다.
  • 양방향 암호화 : 암호화, 복호화 모두 가능하다.  ex) 이메일, 핸드폰번호 etc.

 

HTTPS에서 사용하는 암호화는 어떤 암호화일까?

바로 양방향 암호화이다. 서버와 클라이언트가 서로 암호화하고 복호화 하는 것이 모두 가능하다.

 

그럼 양방향 암호화는 어떻게 하는 걸까?

암호화는 알고리즘을 통해 할 수 있다. 그리고 이 알고리즘은 크게 두가지로 나뉜다.

 

  • 대칭형 암호화 : 암호화를 하는 사람과 복호화를 하는 사람 모두 같은 키를 공유하고 있는 것
  • 비대칭형 암호화 : 암호화를 하는 사람과 복호화를 하는 사람이 서로 다른 키를 가지고 할 수 있는 것.

 

 

대칭형 암호화

대칭형 암호화는 공유키 하나로 암호화와 복호화를 할 수 있는 것을 말한다.

사진을 보면 클라이언트에서 "안녕!"이라는 평문을 공유키를 사용해 암호화 시키면 서버에선 암호화된 문자를 공유키를 사용해 "안녕!"이라는 평문으로 복호화시켜 메세지를 확인할 수 있다. 이때, 클라이언트와 서버는 키를 공유하게 된다. 공유키 하나로 복호화, 암호화 모두 가능하여 속도가 빠르다는 장점이 있지만 공유키를 전달하는 과정에서 키가 노출이 되면 메세지도 노출될 수 있다는 단점이 있다.

 

* 핵심

- 공유키 하나로 암호화와 복호화 가능

- 속도가 빠르지만 공유키를 배달하는 과정에서 키가 노출될 수 있다는 위험요소가 존재함

 

비대칭형 암호화

비대칭형은 암호화키와 복호화키가 다른 암호화 기술이다.

사진에서보면 클라이언트와 서버는 각각 키를 두 개 가지고 있다. 하나는 암호화, 하나는 복호화를 할 수 있는 키이다. 그리고 둘 다 비대칭형 암호화를 위해 그 중 하나의 키를 공개키 서버에 올려둔다. 여기서 우리는 공개키 서버에 올려두는 키를 공개키, 비밀로 가지고 있는 키를 비밀키 혹은 개인키라고한다.

클라이언트가 서버에 메세지를 보내기위해 공개키 서버에 서버가 올려둔 공개키를 가져와 평문을 암호화하여 서버에 보낸다. 암호화된 데이터는 서버만이 복호화할 수 있기 때문에 중간에 데이터가 유출이 되어도 평문을 절대 알 수 없다. 서버는 가지고 있는 개인키로 클라이언트가 보낸 데이터를 복호화하여 평문을 확인할 수 있다.

하지만 비대칭형 암호화는 대칭형 암호화에 비해 현저히 속도가 느리다는 단점이 있다. 따라서 현실적으로는 비대칭형 암호를 이용해서 대칭형 암호의 키를 배송하고 실제 암호문은 대칭형 암호를 사용하는 식으로 상호보완적으로 사용하는 것이 일반적이다. 또, 취약점이 아예 없는 기술은 아니다. 중간자 공격(Man In The Middle Attack)은 중간에서 통신을 가로채어 수신자에게는 송신자인 척 하고 송신자에게는 수신자인 척 해서 양쪽의 공개키와 실제 암호화에 사용되는 대칭키를 모두 얻어내는 기법으로 비대칭형 암호화에도 취약점이 있다. 

 

* 핵심

- 공개키와 개인키로 각각 암호화와 복호화하는 키가 다름

- 대칭형 암호화에 비해 현저히 속도가 느리지만 보안엔 강함.

- 취약점이 아예 없는 기술은 아님

 

 

 

 

 

참조

https://velog.io/@surim014/HTTP%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

 

HTTP란 무엇인가?

HTTP (HyperText Transfer Protocol) 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. 이렇게 규약을 정해두었기 때문에 모든 프로그램이 이 규약에 맞춰 개발해서 서

velog.io

https://www.zehye.kr/etc/2021/09/15/etc_encryt/

 

암호화와 복호화, 양방향 알고리즘(공개키, 비공개키) · 지혜의 개발공부로그

암호화와 복호화, 양방향 알고리즘(공개키, 비공개키) 15 Sep 2021 | 암호화 복호화 공개키 비공개키 AES RSA 개인적인 연습 내용을 정리한 글입니다. 더 좋은 방법이 있거나, 잘못된 부분이 있으면 편

www.zehye.kr

https://post.naver.com/viewer/postView.nhn?volumeNo=16561296&memberNo=1834 

 

인터넷 프로토콜 http와 https의 차이는 뭘까? 보안과 마케팅 측면에서 살펴보기

[BY 세아향] 네이버는 물론이고 이 글을 읽고 있는 세아향 포스트도 그렇고, 온라인 쇼핑몰 등 다양한 ...

m.post.naver.com

https://kingjakeu.github.io/study/2020/08/11/HTTP-HTTPS/

 

HTTP와 HTTPS의 차이 및 특징 (+ 쿠키 & 세션) · Studio u by kingjakeu

HTTP와 HTTPS의 차이 및 특징 (+ 쿠키 & 세션) 07 Jan 2021 HTTP 란 HTTP는 평문 통신이다. 복잡한 형식의 데이터를 주고 받는 것이 아닌, 텍스트를 주고 받는 형식이다. 그렇기 때문에 누군가 통신을 가로

kingjakeu.github.io

 

'Network' 카테고리의 다른 글

쿠키(Cookie)와 세션(Session)  (1) 2022.10.11
OSI 7 Layer 와 TCP/IP 비교  (1) 2022.10.08
OSI 7계층과 프로토콜(Protocol), TCP/UDP 차이  (4) 2022.10.08