본문 바로가기

web

web - HTTPS의 동작 방식

 

 

HTTPS의 동작 방식

 

HTTPS(Hypertext Transfer Protocol Secure)는 웹에서 보안이 강화된 통신을 제공하기 위해 사용되는 프로토콜입니다. 기본적으로 HTTP 프로토콜 위에서 SSL/TLS 프로토콜을 사용하여 암호화된 연결을 제공합니다. 이로 인해 중간자 공격(Man-in-the-middle attack)을 방지하고, 데이터의 기밀성, 무결성 및 인증을 보장할 수 있습니다.

 

 

HTTPS가 동작하는 방식은 다음과 같습니다:

 

 

1.클라이언트(브라우저)가 서버에 HTTPS 요청을 보냅니다.

클라이언트는 웹 주소를 입력하거나 링크를 클릭하여 HTTPS 페이지에 액세스하려고 시도합니다. 이때 브라우저는 웹 서버에 대한 보안 연결을 설정하려고 시도하며, 이를 시작으로 SSL/TLS 핸드셰이크 과정이 시작됩니다.

 

 

2.서버는 SSL/TLS 인증서를 클라이언트에게 제공합니다.

서버는 클라이언트에게 자신의 공개 키와 서버 정보가 포함된 인증서를 전송합니다. 인증서는 신뢰할 수 있는 인증 기관(Certificate Authority, CA)에 의해 서명되어 있습니다. 인증 기관은 인증서의 정보를 검증하고, 서명하여 제 3자의 신뢰를 보장합니다.

 

 

3.클라이언트는 인증서를 확인하여 서버의 신원을 검증합니다.

클라이언트 브라우저는 서버로부터 받은 인증서를 검증합니다. 이 과정에서 인증서의 만료일, 도메인 이름 일치 여부, 인증 기관의 신뢰성 등을 확인합니다. 인증서가 유효하다고 판단되면, 클라이언트는 공개 키를 사용하여 비밀 키를 생성하고 암호화합니다. 이 암호화된 비밀 키는 서버에게 전송됩니다.

 

 

4.서버는 개인 키를 사용하여 암호화된 비밀 키를 복호화합니다.

서버는 자신의 개인 키를 사용하여 클라이언트가 전송한 암호화된 비밀 키를 복호화합니다. 이제 클라이언트와 서버는 이 비밀 키를 사용하여 통신할 수 있습니다. 이 비밀 키를 세션 키라고도 부릅니다.

 

 

5.클라이언트와 서버는 암호화된 연결을 통해 데이터를 안전하게 주고받습니다.

클라이언트와 서버는 세션 키를 사용하여 모든 데이터를 암호화하고 복호화합니다. 이 과정에서 전송되는 데이터는 중간자에 의해 도청되거나 조작될 수 없습니다. 이렇게 하여 웹 트래픽의 기밀성, 무결성 및 인증을 보장합니다.

 

 

 

 

3번 과정에서 언급된 공개 키는 서버의 공개 키입니다. 이 공개 키는 서버가 SSL/TLS 인증서를 구매하고 인증 기관(Certificate Authority, CA)으로부터 발급받을 때 생성되며, 인증서에 포함됩니다. 이 공개 키는 일반적으로 사용되는 공개 키 암호화 방식에 속하며, 핸드셰이크 과정에서 생성되지 않습니다.

 

 

SSL/TLS 핸드셰이크 과정에서, 서버는 자신의 인증서를 클라이언트에게 전송합니다. 클라이언트는 인증서를 검증하고, 인증서 내에 포함된 서버의 공개 키를 사용하여 통신에 사용될 비밀 키(세션 키)를 암호화합니다. 이 암호화된 비밀 키는 서버에게 전송되며, 서버는 자신의 개인 키를 사용하여 복호화하여 통신에 사용할 준비를 마칩니다. 이렇게 공개 키와 개인 키를 사용한 암호화 및 복호화 과정을 통해 클라이언트와 서버 간에 안전한 연결이 구축됩니다.

 

SSL/TLS 핸드셰이크 과정

 

이 과정을 SSL/TLS 핸드셰이크 관점에서 아래와 같이 표현할 수 있습니다.

 

1. 클라이언트 헬로(Client Hello): 클라이언트가 서버에게 "헬로" 메시지를 보내며, 핸드셰이크를 시작합니다. 이 메시지에는 클라이언트가 지원하는 SSL/TLS 버전, 암호화 스위트(Cipher Suite) 목록, 무작위로 생성된 데이터(Client Random)가 포함됩니다.

2. 서버 헬로(Server Hello): 서버는 클라이언트의 "헬로" 메시지를 받고, "헬로" 메시지에 응답합니다. 서버는 사용할 SSL/TLS 버전, 선택된 암호화 스위트, 무작위로 생성된 데이터(Server Random)를 클라이언트에게 전송합니다.

3. 서버 인증서(Server Certificate): 서버는 자신의 공개 키가 포함된 인증서를 클라이언트에게 제공합니다. 클라이언트는 인증서를 확인하여 서버의 신원을 검증합니다.

4. 서버 키 교환(Server Key Exchange): 서버는 이 단계에서 필요한 추가 키 정보를 전송합니다. 이는 디피-헬만 키 교환 등과 같은 키 교환 알고리즘에 따라 다릅니다.

5. 서버 헬로 끝(Server Hello Done): 서버는 클라이언트에게 모든 필요한 정보를 전송했음을 알리고, 클라이언트의 응답을 기다립니다.

6. 클라이언트 키 교환(Client Key Exchange): 클라이언트는 서버의 공개 키를 사용하여 세션 키를 암호화하고, 암호화된 세션 키를 서버에게 전송합니다.

7. 클라이언트와 서버의 키 머티리얼 계산(Key Material Calculation): 클라이언트와 서버는 무작위로 생성된 데이터와 세션 키를 사용하여 암호화와 복호화에 사용할 키 머티리얼을 생성합니다.

8. 클라이언트 종료(Client Finished): 클라이언트는 핸드셰이크가 완료되었음을 서버에 알립니다. 이 메시지는 암호화되어 전송됩니다.

9 .서버 종료(Server Finished): 서버는 핸드셰이크가 완료되었음을 클라이언트에 알립니다. 이 메시지도 암호화되어 전송됩니다.

 

 

HTTPS 트래픽의 보안을 향상시키기 위해 많은 사이트에서 기본 프로토콜로 사용되고 있습니다. 또한 검색 엔진 최적화(SEO) 사용자 신뢰도 측면에서도 중요한 역할을 담당하고 있습니다.