HTTP와 HTTPS는 머가 다를까?

Junbro·2022년 7월 28일
0

네트워크

목록 보기
2/4
post-thumbnail

이번 글에서는 결론부터 말하겠다.

HTTP와 HTTPS의 큰 차이점은 암호화 뿐이다.

그럼 이제 그 차이점에 대해서 알아보자.

1. HTTPS란?

HTTPS(Hyper Text Transfer Protocol Secure)는 HTTP에 암호화(SSL)가 추가된 프로토콜이다.

지난번에 HTTP에 대해 살펴보았다.

GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.l zlib/1.2.11
Host: www.example.com
Accept-Language: en

만약 클라이언트 서버가 HTTP을 통해 요청, 응답을 주고 받고 있는데 중간에 나쁜 사람이 메세지(패킷)을 탈취하여 그것을 본다고 하면 어떤 일이 발생할까?

만약, 그 정보가 개인정보라 유출이 되면 안되는 것(비밀번호, 주민번호)이라면 우리는 위험에 처할 것이다.

Response Body:
{
  "password": "1234"
}

이러한 문제들을 해결하기 위해 HTTP 메세지를 그대로 주고받는 것이 아니라 클라이언트, 서버만 그 메세지를 이해할 수 있도록 암호화 하는것이 HTTPS다.

실제로 HTTPS 메세지를 살펴보자.

t8Fw6T8UV81pQfyhDkhebbz7+oiwldr1j2gHBB3L3RFTRsQCpaSnSBZ78Vme+DpDVJPvZ
dZUZHpzbbcqmSW1+3xXGsERHg9YDmpYk0VVDiRvw1H5miNieJeJ/FNUjgH0BmVRWII6+T
4MnDwmCMZUI/orxP3HGwYCSIvyzS3MpmmSe4iaWKCOHQ==

만약 해커가 중간에서 우리의 메세지를 중간에서 탈취하여도 위와 같이 보일 것이다. 해커는 이 암호화 된 메세지를 해독할 ‘암호화 키’가 없기 떄문에 어떤한 내용인지 알 수 없다.

그렇다면 우리는 조금 더 안전하게 메세지를 주고받을 수 있다.

2. 어떻게 암호화 할까?

HTTP 메시지 (평문)을 암호화 하기위해 TLS(Transport Layer Security, 과거 명칭: SSL (Secure Sockets Layer))을 사용한다.

전송 계층 보안 - 위키백과, 우리 모두의 백과사전

쉽게 말하면, 우리의 메시지(패킷)을 암호화 하기 위한 약속(프로토콜)이다.

암호화 하기 위한 과정을 쉽게 풀어보았다.

  • 공개키 암호화 방식을 사용한다.
    • 공개키와 개인키가 존재한다.
    • 한쪽 키로 데이터를 암호화 했다면 오직 다른쪽 키로만 복호화를 할 수 있다.

  • 서버에서 모두와 공유하는 공개키와, 개인키(비밀키)를 가지고 있는다.
  • 공개키를 클라이언트에게 넘겨준다.
  • 클라이언트와 서버가 연결이 수립되면 (세션이 열리면) 공개키와 개인키를 이용하여 해당 클라이언트,서버만 공유하는 세션키를 만든다.
  • 이렇게 클라이언트와 서버가 세션키를 공유한 후에는 이 세션키를 ‘암호화 키’로 사용하여 앞으로 주고받는 모든 메세지(HTTP)를 암호화, 복호화를 진행한다.

암호화 과정을 정말 느슨하게 설명했는데 사실 더 복잡한 과정과 개념이 존재한다.

  • 대칭키 암호화
  • 비대칭키 암호화
  • TLS handshake
  • CA (인증기관)
  • SSL 인증서
  • ...

이 과정이 더 깊게 궁금하신 분들은 아래에 자료들을 보시면 도움이 될것입니다.

HTTPS가 뭐고 왜 쓰나요? (Feat. 대칭키 vs. 비대칭키)

HTTPS 통신과정 쉽게 이해하기 #1(HTTPS의 개요)

[Web] HTTP와 HTTPS의 개념 및 차이점

HTTPS 통신 원리 쉽게 이해하기 (Feat. SSL Handshake, SSL 인증서)

이 암호화 과정에서 우리가 알아야 할 중요한 부분은

“HTTPS 를 서버와 클라이언트가 공유한 세션키를 통해 복호화 하면 HTTP 메시지가 나온다는 것이다.”

t8Fw6T8UV81pQfyhDkhebbz7+oiwldr1j2gHBB3L3RFTRsQCpaSnSBZ78Vme+DpDVJPvZ
dZUZHpzbbcqmSW1+3xXGsERHg9YDmpYk0VVDiRvw1H5miNieJeJ/FNUjgH0BmVRWII6+T
4MnDwmCMZUI/orxP3HGwYCSIvyzS3MpmmSe4iaWKCOHQ==

앞서 살펴본 위에 HTTPS 메시지를 복호화 하면 아래와 같은 HTTP 메세지가 나온다.

GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.l zlib/1.2.11
Host: www.example.com
Accept-Language: en

이러한 과정을 통해 우리는 완벽하지는 않지만 보다 더 안전하게 메시지를 주고받을 수 있다.

3. 무엇을 사용해야 할까?

크롬에서 HTTPS 통신을 사용하지 않는 사이트에 접속하면 경고창을 발생시킨다.


만약, 우리가 개발하는 웹사이트에서 로그인, 인증을 진행하고 사용자의 개인정보를 서버와 주고 받는다면 필수적으로 HTTPS를 도입해야한다.

4. 정리

지난번에 살펴보았던 HTTP에 이어 HTTP에 TLS를 이용하여 암호화한 HTTPS의 기본 개념을 살펴보았다.

또, HTTPS에 암호화 방식을 간략하게 살펴보았다.

우리가 네트워크를 통해 주고받는 메세지 보안을 위해서 HTTPS 통신의 도입을 필수적으로 보인다.

그래도 암호화 하지않고 HTTP 통신을 고집한다면 “ 벌거벗고 강남 거리를 다닌다고 생각하면 될 거 같다.”

참고자료

What Are the Differences Between HTTP & HTTPS? | Venafi

HTTP vs HTTPS: What is Difference Between HTTP and HTTPS? Full Form

[네트워크] HTTP vs HTTPS

HTTP vs HTTPS 차이, 알면 사이트의 레벨이 보인다. - wishket

profile
정보를 공유하겠습니다 😀

0개의 댓글