CS/네트워크

[네트워크] HTTPS의 개념과 동작 원리

mhko411 2021. 9. 24. 11:51
728x90

HTTPS는 HTTP에 보안이 강화된 프로토콜이라는 것을 알고있다. 프로젝트를 진행하면서 SSL 인증서를 발급받아 HTTPS로 요청할 수 있도록 했던 경험도 있다. 하지만 정확히 HTTPS가 어떻게 동작하는지 알지 못했기 때문에 이번 기회에 HTTPS의 개념과 동작원리를 이해하려고 한다.


HTTPS의 개념

HTTP는 TCP/IP 위의 애플리케이션 계층에서 사용되는 프로토콜이다. 여기서 HTTPS는 TCP/IP위에 SSL 또는 TLS를 통해 보안을 강화한 프로토콜이다. 이를 통해 모든 HTTP의 요청과 응답은 암호화된다.

 

HTTPS 동작을 알아보기 전에 알아두어야 할 개념

HTTPS의 동작 원리를 알아보기 전에 대칭키, 공개키, CA(Certificate Authority)를 이해해야한다.

 

1. 대칭키

암호화와 복호화에 쓰이는 키가 같은 암호화 알고리즘이다. 만약 클라이언트와 서버가 대칭키를 통해 통신을 한다면 클라이언트와 서버가 모두 공유키를 갖고있어야 한다. 하지만 클라이언트 측에는 보안 위험성이 높기 때문에 공유키가 노출될 수도 있으며 공유키를 안전하게 서버에 전달하기 어렵다.

 

2. 공개키

공개키와 개인키를 함께 사용하는 암호화 알고리즘이다. 암호화할 때는 공개키를 사용하고 복호화할 때는 개인키를 사용한다. 클라이언트에서 공개키를 사용해서 암호화한 데이터를 서버에 보내면 서버는 해당 공개키로 암호화된 데이터를 복호화할 수 있는 개인키로 복호화를 한다. 이러한 방법은 안전하게 통신을 할 수 있지만 속도가 느리다는 단점이 존재한다.

 

3. CA(Certificate Authority)

SSL을 적용하기 위해서 인증서가 필요하다. 인증서는 서비스의 정보와 서버 측의 공개키가 포함되어 있다. 이때 인증서를 발급해주는 기업을 CA라고 하며 브라우저는 CA리스트를 미리 가지고 있다. 브라우저는 해당 CA가 리스트에 있는지 확인한 후에 리스트에 있다면 해당 CA의 공개키를 이용해서 인증서를 복호화한다.

 

HTTPS의 동작

아래의 그림은 HTTPS의 동작 과정을 나타낸 그림이다. HTTPS는 대칭키와 공개키를 모두 사용하며 데이터 전송을 위해 대칭키 방식을 사용하고 대칭키를 안전하게 전달하기 위해 공개키를 사용한다.

1. Client hello

브라우저마다 지원하는 암호화 알고리즘과 SSL 버전이 다르기 때문에 해당 정보를 전송하고, 클라이언트가 생성한 랜덤 데이터를 전송한다.

 

2. Server Hello

사용할 SSL 버전과 암호화 알고리즘, 서버가 생성한 랜덤 데이터를 전송한다.

 

3. Certificate

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

 

4. Server Key Exchange

키 교환에 필요한 정보를 전송한다.

 

5. Certificate Request

서버가 클라이언트를 인증해야할 때 인증서를 요구하고 이에 대해 클라이언트는 서버에 전송한다.

 

7. Client Key Exchange, Change Cipher Spec

1번과 2번과정에서 생성한 랜덤 데이터를 조합하여 pre master secret key를 생성하여 대칭키로 사용한다.

 

8. Change Cipher Spec

클라이언트로부터 전송받은 pre master secret key를 복호화한 후에 master key(대칭키)로 승격 후 보안 파라미터를 적용하거나 변경될 때 보내는 과정이다.