HTTP & HTTPS

이승주·2024년 7월 18일
6

HTTP란?

HTTP(Hypertext Transfer Protocol)는 클라이언트와 서버 간 HTML과 같은 하이퍼미디어 문서를 전송하기 위한 통신 규칙 세트 또는 프로토콜이다.

Ex) 사용자가 웹 사이트에 방문해서 웹 브라우저를 통해 웹서버에 HTTP 요청을 전송하면 웹서버에서는 HTTP 응답을 한다.


HTTP의 구조

HTTP는 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동하며 80포트에서 사용한다. HTTP는 상태를 가지고 있지 않는 Stateless 프로토콜이며 Start Line(Status Line), Headers, Body 등으로 구성된다.

HTTP Request Message

HTTP Response Message

HTTP는 무상태성이라는 장점으로 서버확장성이 높다는 장점이 있지만 치명적인 보안 단점이 있다.
데이터를 주고 받을 때 평문 데이터를 전송하는 프로토콜이기 때문에 비밀번호나 주민등록번호를 주고 받으면 제 3자가 정보를 조회할 수 있다는 점이다. 이러한 문제를 해결하기 위해 등장한 것이 HTTPS다.


HTPPS란?

HTTPS는 HTTP에 SSL을 사용하여 데이터 암호화가 추가된 프로토콜이다. HTTPS는 HTTP와 다르게 443번 포트를 사용하며, 네트워크 상에서 중간에 제3자가 정보를 볼 수 없도록 암호화를 지원하고 있다.

HTTP 자체를 암호화 하는 것이 아닌 HTTP 메세지 BODY를 암호화 한는 것이다.

SSL

Secure Sokects Layer의 약자이며 웹 서버와 웹 브라우저간 보안을 위해 만든 프로토콜이다.
대칭키/ 비대칭 기반을 사용한다.

대칭키 암호화와 비대칭키 암호화

앞서 언급하였듯이 SLL을 사용하는 HTTPS는 대칭키 암호화 방식과 비대칭키 암호화 방식을 모두 사용하고 있다. 각각의 암호화 방식은 다음과 같다.

대칭키 암호화

  • 클라이언트와 서버가 동일한 키를 사용해 암호화/복호화를 진행함
  • 키가 노출되면 매우 위험하지만 연산 속도가 빠름

비대칭키 암호화

  • 1개의 쌍으로 구성된 각각의 공개키와 개인키를 암호화/복호화 하는데 사용함
  • 키가 노출되어도 비교적 안전하지만 연산 속도가 느림

비대칭키 암호화

암호화를 공개키로 하느냐 개인키로 하느냐에 따라 얻는 효과가 다른데, 공개키와 개인키로 암호화하면 각각 다음과 같은 효과를 얻을 수 있다.

공개키 암호화: 공개키로 암호화를 하면 개인키로만 복호화할 수 있다.
-> 개인키는 나만 가지고 있으므로, 나만 볼 수 있다.

개인키 암호화: 개인키로 암호화하면 공개키로만 복호화할 수 있다.
-> 공개키는 모두에게 공개되어 있으므로, 내가 인증한 정보임을 알려 신뢰성을 보장할 수 있다.


HTTPS 동작과정

HTTPS는 대칭키 암호화와 비대칭키 암호화를 모두 사용하여 빠른 연산 속도와 안정성을 모두 얻고 있다.

처음 연결을 성립하여 안전하게 세션키를 공유하는 과정(HTTPS 연결 과정 Hand-Shaking)에서 비대칭키가 사용되는 것이고, 이후에 데이터를 교환하는 과정에서 빠른 연산 속도를 위해 대칭키가 사용되는 것이다

그렇다면 가장 중요한 내용인 HTTPS의 동작 방식에 대해서 알아보자.

HTTPS의 경우 웹 브라우저와 웹 서버말고 추가적으로 CA(Certificate Authority)라는 인증 기관이 추가되어 웹 브라우저, 웹 서버, CA 세개의 주체가 키를 주고 받으며 하나의 대칭키를 생성한다고 생각할 수 있다.

1. 웹 서버(사이트)에서 인증기관(CA)에게 사이트 정보와 사이트 공개키를 전송한다.

2. 인증기관에서는 전달받은 데이터를 검증 후 인증기관의 개인키로 암호화(서명)한다.

3. 사이트 인증서가 생성되어 이 인증서를 웹 서버(사이트)에게 인증서를 전달한다.

4. 그후, 인증기관(CA)은 웹 브라우저(사용자)에게 인증기관의 공개키를 제공하고 사용자 브라우저에 자동으로 내장된다.

5. 모든 준비가 끝나고 웹 브라우저(사용자)는 웹 서버(사이트)에게 접속을 요청한다.

6. 웹 서버(사이트)는 웹 브라우저(사용자)에게 인증기관(CA)에서 받은 사이트 인증서를 준다.

7. 웹 브라우저(사용자)는 인증기관 공개키를 사용하여 사이트 인증서를 복호화하여 사이트 정보와 사이트 공개키를 얻을 수 있다.

8. 사이트 공개키를 활용하여 사용자는 통신에 사용할 대칭키(세션키)를 암호화하여 웹 서버(사이트)에게 전달한다.


9. 웹 서버(사이트)는 자신이 가지고 있는 개인키를 활용하여 대칭키(세션키)를 복호화하여 대칭키를 얻는다.

10. 이후 대칭키를 활용하여 암호화하여 통신을 진행한다.


참고자료

99CORN- HTTP Request/Response 구조

https://velog.io/@hyoribogo/what-is-the-defference-between-http-and-https
https://mangkyu.tistory.com/98

https://rnclf1005.tistory.com/11
https://www.youtube.com/watch?v=wPdH7lJ8jf0&t=339s

profile
반복되는 실수를 기록을 통해 줄여가보자!

0개의 댓글

관련 채용 정보