Computer Science/Network

[Network] HTTPS 동작 상세 과정

[앙금빵] 2022. 11. 27.

 

HTTPS

HTTPS = HTTP의 보안이 강화된 버전으로 SSL/TLS 프로토콜을 사용하여 데이터를 암호화한다.

 

암호화 알고리즘(암호화 수단)을 어느 것을 선택하느냐에 따라 암호화의 강도가 달라지며, SSL 인증서를 이용하여 웹 브라우저와 서버가 서로를 신뢰하고 통신을 한다.

 

HTTP 기반으로 하여 웹서버와 암호화 통신을 하되 암호화 통신을 위한 별도의 협의 과정을 걸치게 된다. 결국, 웹 브라우저와 웹 서버의 통신은 IP가 필요하기에 HTTP 프로토콜은 TCP 기반으로 하는 프로토콜이다. TCP를 이용한 3-way handshake(연결 합의)를 거친 이후에 HTTP를 사용하여 페이지를 얻어오기 때문이다.

 

SSL 인증서를 이용하여 웹브라우저와 서버가 서로를 신뢰하고 통신을 한다.

 

HTTPS 동작과정

HTTPS 는 대칭키 암호화와 비대칭키 암호화를 모두 사용하여 빠른 연산 속도와 안정성을 모두 얻고 있다.

 

① HTTPS 연결 과정(Hand-Shaking)에서 먼저 서버와 클라이언트 간 세션키를 교환한다.

 

② 세션키는 주고 받는 데이터 암호화하기 위해 사용되는 대칭키이며, 데이터 교환에는 빠른 연산 속도가 필요하므로 세션키는 대칭키로 만들어진다.

 

처음 연결을 성립하여 안전하게 세션키를 공유하는 과정에서 비대칭키가 사용되는 것이고, 이후에 데이터 교환하는 과정에서 빠른 연산 속도를 내기 위해 대칭키가 사용되는 것이다.

 

HTTPS 통신 상세 과정


1. 클라이언트(브라우저)가 서버로 최초 연결 시도를 한다.

1-1. Client Hello

브라우저마다 지원하는 암호화 알고리즘과 SSL/TLS 버전이 다르므로 해당 정보를 전송하며, 난수 값을 생성하여 Cipher suite list를 전송한다.

 

1-2. Server Hello

사용할 TLS 버전, 사용할 암호화 알고리즘, 난수값을 전송한다.

💡 Cipher suite list
암호화 세팅, 암호화 알고리즘이 사용되었는지에 대한 정보를 의미한다.

 

2. 서버는 공개키(엄밀히는 인증서)를 브라우저에게 넘겨준다.

2-1. Certificate

CA로부터 발급받은 인증서를 전송한다.

 

2-2. Server Key Exchange

키 교환에 필요한 정보를 제공하며 만약 필요하지 않는다면 해당 과정은 생략된다.

 

 


3. 브라우저는 인증서의 유효성을 검증하고 세션키를 발급한다.

3-1. Certificate Request

서버가 클라이언트에게 인증서를 요구하는 단계이며 요청하지 않을 수도 있다.

3-2. Server Hello Done

 

4. 브라우저는 세션키를 보관하며 추가로 서버의 공개키로 세션키를 암호화하여 서버로 전송한다.

4-1. Client key Exchange, Change Cipher Spec

Pre-master-key 라는 것을 전송한다. 이 키는 1-1, 1-2 단계에서 생성한 난수를 조합하여 생성하게 되며 대칭키로 사용된다. 그렇기에 안전한 전송을 위해 공개키 방식을 사용하여 전송한다.


5. 서버는 개인키로 암호화된 세션키를 복호화하여 세션키를 얻는다.

5-1. Change Cipher Spec

클라이언트로 부터 전송받은 Pre-master-key를 정상적으로 복호화 후 master-key(대칭키)로 승격하여 보안 파라미터를 적용하거나 변경될 때 보낸다.

 

6. 클라이언트와 서버는 동일한 세션키를 공유하므로 데이터를 전달할 때 세션키로 암호화/복호화를 진행한다.

비대칭 방식의 암호화 과정은 끝나게 되며 대칭키를 이용한 암복호화 과정을 통해 서로간 통신을 진행한다.


전체 과정 그림

아래 그림은 앞서 설명한 과정들에 대하여 도식화한 자료이다.

 

댓글