인터넷을 이용하면서 웹사이트 주소 앞에 http://나 https://를 본 적이 있을 것이다. 이 두 프로토콜은 모두 웹에서 정보를 주고받는 방식이지만, 그 사이에는 중요한 차이점이 존재한다. 이번 글에서는 HTTP와 HTTPS의 정의, 차이점, 그리고 HTTPS의 보안 기능에 대해 알아보겠다.

HTTP란 무엇인가?
HTTP는 하이퍼텍스트 전송 프로토콜의 약자로, 네트워크를 통해 데이터를 전송하는 데 사용되는 프로토콜이다. 웹 페이지의 텍스트, 이미지, 동영상 등 다양한 리소스를 전송하며, 웹 사이트 콘텐츠 및 API 호출을 포함하여 인터넷을 통해 전송되는 대부분의 정보는 HTTP 프로토콜을 사용한다. HTTP가 80번 포트 사용한다.
HTTP 메시지는 주로 요청과 응답 두 가지 유형으로 나뉜다. 예를 들어, GET 요청은 다음과 같이 나타난다:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.1 zlib/1.2.11
Host: www.example.com
Accept-Language: en
하지만 웹사이트에서 HTTPS 대신 HTTP를 사용하는 경우, 세션을 모니터링하는 모든 사람이 모든 요청과 응답을 읽을 수 있다. 이는 악의적인 공격자가 어떤 정보를 요청하고 주고받는지 정확히 알 수 있다는 뜻이다.
HTTPS란 무엇인가?
HTTPS의 'S'는 보안(Secure)을 의미한다. HTTPS는 HTTP에 SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security) 프로토콜을 추가하여 데이터를 암호화한다. 이를 통해 데이터의 기밀성과 무결성을 보장하며, 웹사이트의 신원을 인증할 수 있다. HTTPS는 443번 포트 사용한다.
HTTPS를 사용하면 앞서 언급한 HTTP 요청이 암호화되어 공격자는 무작위로 보이는 문자만 보게 된다:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.1 zlib/1.2.11
Host: www.example.com
Accept-Language: en
대신 다음과 같은 문자가 보인다.
t8Fw6T8UV81pQfyhDkhebbz7+oiwldr1j2gHBB3L3RFTRsQCpaSnSBZ78Vme+DpDVJPvZdZUZHpzbb
HTTPS에서 TLS/SSL은 어떻게 작동하는가?
TLS는 공개 키 암호화라는 기술을 사용한다. 두 개의 키, 즉 공개 키와 개인 키가 있으며, 공개 키는 서버의 SSL 인증서를 통해 클라이언트 장치와 공유된다. 클라이언트가 서버와의 연결을 열면, 두 장치는 공개 키와 개인 키를 사용하여 세션 키라는 새로운 키를 생성하고, 이를 통해 추가 통신을 암호화한다.
모든 HTTP 요청과 응답이 이 세션 키로 암호화되므로, 통신을 가로채는 사람은 일반 텍스트가 아닌 암호화된 문자만 볼 수 있다. HTTPS에서 암호화/복호화 과정으로 인해 약간 느릴 수 있으나 차이는 미미하다.
HTTPS는 웹 서버 인증에 어떻게 도움이 되는가?
인증은 사람이나 기계가 자신이 주장하는 실체인지 확인하는 것을 의미한다. HTTP에서는 신뢰 원칙에 따라 신원을 확인하지 않지만, HTTPS에서는 SSL/TLS 인증서를 통해 서버의 신원을 확인한다. 클라이언트가 웹사이트에 접속할 때, 서버의 SSL 인증서에 있는 공개 키와 일치하는 개인 키를 소유하고 있으면 해당 서버가 실제로 웹사이트의 합법적인 호스트임을 증명한다. 이를 통해 피싱 사이트나 중간자 공격과 같은 여러 가지 공격을 방지할 수 있다.
결론
HTTP와 HTTPS는 모두 웹에서 정보를 주고받는 프로토콜이지만, HTTPS는 암호화 및 인증이 추가된 HTTP이다. 두 프로토콜의 유일한 차이점은 HTTPS가 TLS(SSL)를 사용하여 일반 HTTP 요청과 응답을 암호화하고 해당 요청과 응답에 디지털 서명을 한다는 점이다. 그 결과로 HTTPS는 HTTP보다 훨씬 더 안전하다. 현대의 인터넷 환경에서는 사용자 데이터 보호와 신뢰성 확보를 위해 HTTPS 사용이 필수적이다.
'Study > Security' 카테고리의 다른 글
| 웹 애플리케이션의 일반적인 보안 취약성 종류 (0) | 2024.07.09 |
|---|