이번 글에서는 결론부터 말하겠다.
HTTP와 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==
만약 해커가 중간에서 우리의 메세지를 중간에서 탈취하여도 위와 같이 보일 것이다. 해커는 이 암호화 된 메세지를 해독할 ‘암호화 키’가 없기 떄문에 어떤한 내용인지 알 수 없다.
그렇다면 우리는 조금 더 안전하게 메세지를 주고받을 수 있다.
HTTP 메시지 (평문)을 암호화 하기위해 TLS(Transport Layer Security, 과거 명칭: SSL (Secure Sockets Layer))을 사용한다.
쉽게 말하면, 우리의 메시지(패킷)을 암호화 하기 위한 약속(프로토콜)이다.
암호화 하기 위한 과정을 쉽게 풀어보았다.
암호화 과정을 정말 느슨하게 설명했는데 사실 더 복잡한 과정과 개념이 존재한다.
- 대칭키 암호화
- 비대칭키 암호화
- TLS handshake
- CA (인증기관)
- SSL 인증서
- ...
이 과정이 더 깊게 궁금하신 분들은 아래에 자료들을 보시면 도움이 될것입니다.
HTTPS가 뭐고 왜 쓰나요? (Feat. 대칭키 vs. 비대칭키)
이 암호화 과정에서 우리가 알아야 할 중요한 부분은
“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
이러한 과정을 통해 우리는 완벽하지는 않지만 보다 더 안전하게 메시지를 주고받을 수 있다.
크롬에서 HTTPS 통신을 사용하지 않는 사이트에 접속하면 경고창을 발생시킨다.
만약, 우리가 개발하는 웹사이트에서 로그인, 인증을 진행하고 사용자의 개인정보를 서버와 주고 받는다면 필수적으로 HTTPS를 도입해야한다.
지난번에 살펴보았던 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