Web/Network

[Web] HTTP와 HTTPS(HTTP Secure), SSL/TLS, 핸드셰이크

생각많은 프로그래머 2024. 1. 30. 00:14

서버와 클라이언트 간의 웹 통신에서는 통신 프로토콜

HTTP(HyperText Transfer Protocol)가 주로 사용된다.

 

HTTP는 클라이언트가 서버에게 요청을 보내고,

서버가 클라이언트에게 요청에 대한 응답을 보내는 데 사용되며,

이를 통해 웹 페이지의 요청과 응답이 이루어진다.

 

HTTP 프로토콜은 요청과 응답이라는 두 가지 주요한 메시지 형식을 사용한다.

클라이언트는 요청 메시지를 생성하여 서버에게 보내고,

서버는 해당 요청에 대한 응답 메시지를 생성하여 클라이언트에게 보낸다.

 

이러한 요청과 응답 메시지는 특정한 구조와 규칙에 따라야 하는데

여기서 중요한 점은 클라이언트와 서버가 동일한 프로토콜을 사용하여

통신해야 한다는 점이다.

 

즉, 클라이언트가 HTTP를 사용하여 요청을 보내면,

서버는 이를 HTTP로 이해하고 그에 맞는 응답을 보내야 한다.

 

 

 

최근에는 HTTPS(HTTP Secure : 보안 HTTP)도 많이 사용되고 있다.

HTTPS는 HTTP의 보안 버전으로,

데이터의 안전한 전송을 보장하기 위해 SSL/TLS 프로토콜을 사용한다.

즉, HTTPS는 HTTP 프로토콜을 사용하여 데이터를 전송하지만,

SSL/TLS 프로토콜을 사용하여 통신을 보호하는 프로토콜을 말한다.

 

SSL/TLS 프로토콜 ?

더보기

SSL(Secure Sockets Layer) / TLS(Transport Layer Security)

SSL과 TSL 프로토콜은 OSI 7 Layer에서도
전송계층(4계층)과 응용계층(7계층) 사이에서
클라이언트와 서버 간의 웹 데이터 암호화(기밀성), 상호 인증 및 전송 시 
데이터 무결성을 보장하는 보안 프로토콜을 말한다.

 

HTTPS가 위 두 프로토콜을 이용하여 통신을 보호하기 때문에
https://~  표기형식을 이용하며,HTTPS의 기본 포트 번호인 443포트를 이용한다.

 
SSL은 초기에 개발되었고, TLS는 이를 대체하는 새로운 프로토콜로 등장했다.
(현재 대부분의 웹 사이트와 서비스에서는 TLS를 사용하고 있다.)

HTTPS는 웹 브라우저와 웹 서버 간의 통신을 안전하게 만들기 위해
SSL 또는 TLS 프로토콜을 사용한다.
클라이언트(웹 브라우저)와 서버 간의 통신이 시작될 때,
먼저 SSL/TLS 핸드셰이크가 이루어지고,
이 핸드셰이크 과정*에서 클라이언트와 서버는
암호화 알고리즘 및 기타 통신 매개 변수를 협상한다. 

그 후에는 클라이언트와 서버 간의 데이터 전송이
SSL/TLS 암호화된 터널을 통해 이루어진다.
이렇게 함으로써 데이터가 중간에 제3자에게 노출되거나
조작되는 것을 방지하고, 안전한 통신을 보장한다.

* 핸드셰이크 과정 : 클라이언트와 서버 간의 보안 연결을 설정하기 위한 프로세스

 

 

웹 브라우저에서 http://www.google.com 으로 접속하면 

주소가 바로 https:www.google.com 으로 바뀌는 것을 볼 수 있다.

그 이유는 구글 웹 서버에서 http로 들어오는 접속을 https로

'리다이렉트(redirect) : 재전송'시키기 때문이다. 

 

구글과 같은 많은 웹 사이트들은 HTTPS를 사용하여 통신한다.

그 이유는 데이터를 암호화하여 보호할 수 있고

데이터가 중간에 누출되거나 조작되는 것을 방지할 수 있기 때문이다.

 

그런 이유로 보안 상의 이유로 사용자가 민감한 정보를 입력할 때에는

HTTPS 를 사용하도록 권장하고 있다.

 

 참고로 이때 프로토콜이 HTTP에서 HTTPS로 바뀌었기 때문에 

별도로 프토토콜의 포트번호를 지정한 것이 아니라면

포트번호 역시 기본 포트번호인 80에서 443으로 바뀌게 된다. 

 

위 주소에서 포트번호가 생략된 이유는 

https의 기본 포트로 설정되어 있기 때문에

별도로 포트번호를 적어 주지 않아도 되어서 그렇다!

 

 

 

 

+ 핸드셰이크 과정 상세설명보기

더보기

핸드셰이크 과정 : 클라이언트와 서버 간의 보안 연결을 설정하기 위한 프로세스

1. 클라이언트(Client)가 서버(Server)에게 ClientHello 메시지를 보낸다.
이 메시지에는 클라이언트가 지원하는 암호화 알고리즘 등의 정보가 포함되어 있다.

2. 서버는 ClientHello에 대한 응답으로 ServerHello 메시지를 보내며,
이 메시지에는 서버가 선택한 암호화 알고리즘 등의 정보가 포함되어 있다.

3. 서버는 클라이언트에게 인증서를 보내고, 필요한 경우 클라이언트도
서버에게 인증서를 보낸다.

4. 클라이언트와 서버는 서로 대칭키(세션 키)를 생성하고 교환한다.

5. 핸드셰이크 과정이 완료되면, 클라이언트와 서버는
데이터 전송을 시작하고,이 데이터는 대칭키를 사용하여 암호화된다.