CS/네트워크

HTTPS 의 개념과 동작방식(+ SSL/TLS)

soo-dal 2024. 1. 1. 22:00

이전에 HTTP란 무엇이며 어떤 특징을 가지고 있는지 정리를 했다.

 

 

인터넷 통신의 기본이 되는 HTTP이지만 요즘 URI를 보면

http://www.youtube.com 보다는 

https://www.youtube.com 이런식으로 s가 추가되어 있는 것을 많이 볼 수 있다.

 

HTTPS가 적용된 것인데.. 이 HTTPS 란 무엇이며 어떻게 동작하는지, 

이 과정에서 사용되는 대칭키, 공개키 개념에 대해서도 설명을 드리겠다.

 

목차

1. HTTPS 개념

2. SSL과 TLS 개념

3. HTTPS의 동작방식

4. 실제 SSL 엿보기

 

1. HTTPS 개념

HTTPS = Hypertext Transfer Protocol Secure의 약자

             = HTTP 에 보안을 추가한 프로토콜로 이해하면 된다.

 

기존 HTTP는 보안이 적용되지 않기 때문에, 클라이언트가 서버로 데이터를 보내면 엿보거나 조작하는 등 악용할 위험이 매우 높다. 이를 해결하기 위해, 보안 프로토콜인 SSL/TLS 를 사용하여 데이터를 악용하는 것을 방지하는 것이다.

 

HTTPS를 정리해보자면,,

HTTPS란 HTTP에 보안을 추가한 프로토콜이며, 아래와 같은 특징을 가진다.

1. 데이터를 암호화하여 보안을 강화

2. HTTPS를 적용한 사이트는 신뢰할 수 있음

 

 

2. SSL과 TLS 개념

HTTPS를 설명할 때, SSL과 TLS를 슬며시 언급했다. 

HTTPS 에 사용되는 프로토콜인데 뭔지 알아보자.

 

SSL = Secure Socket Layer

TLS = Transport Layer Security

 

SSL과 TLS는 HTTP 보안을 위해 사용하는 프로토콜이며, TLS는 SSL의 보안을 강화한 버전이라고 생각하면 된다.

현재 기존 SSL은 사용되지 않고 TLS만 사용되고 있으나, HTTPS의 보안 프로토콜을 가르킬 때 SSL이라고 퉁쳐서 부르고 있다.

 

번외긴 한데, NetScape라는 기업이 1996년도까지 3.0까지 업데이트를 하고 더이상 참여를 하지 않았고, 소유권 문제로 업데이트 한 SSL은 TLS로 이름을 변경해서 사용중이다.

 

 

3. HTTPS 동작 방식

HTTPS 의 개념에 대해 알아봤으니 HTTPS 가 어떤 방식으로 동작하는지 알아보자.

현재 우리가 아는 대부분의 웹사이트는 HTTPS가 적용되어 있을 뿐더러, 나중에 EC2 등의 클라우드에 HTTPS를 적용할 때도 유용하니 공부해놓자.

 

3.1. 대칭키 & 공개키(비대칭키) 개념

HTTPS 의 동작방식을 설명하기에 앞서 보안에서 중요한 개념인 대칭키 & 공개키(비대칭키) 개념에 대해 먼저 정리를 하겠다. HTTPS에서 대칭키 & 공개키에 대한 개념이 언급되니 반드시 알아놔야한다.

 

우리는 보안을 위해 다른 누군가 보더라도 뜻을 해석할 수 없도록 암호화를 해서 전송해야하며, 받는 사람은 이 암호화된 데이터를 해독(복호화)해야한다. 이때, 암호화와 복호화에 사용되는 함수를 키(KEY) 라고 한다.

 

키(KEY)를 사용해서 데이터 암호화 및 복호화

 

 

<대칭키>

가장 기본적인 방식으로는 전송자와 수신자가 같은 키를 통해서 데이터를 암호화하고 복호화하는 것이다. 아래 그림처럼 두 측이 같은 키를 가지고 있다고 해서 대칭키라고 부른다.

대칭키 개념

 

 

[문제점]

대칭키를 사용해서 데이터를 안전하게 보낼 수 있지만, 큰 문제점을 가지고 있다. 초기 대칭키를 공유하는 시점에는 보안이 적용되어 있지 않아 대칭키가 노출될 수 있다는 점이다. 이러한 문제를 해결하기 위한 것이 공개키(= 비대칭키) 개념이다.

 

보안이 없는 초기 상황의 문제점

 

<공개키(= 비대칭키)>

클라이언트와 서버 구조에서 서버 측은 다른 누군가 봐도 상관 없는 '공개키' 와 본인만 가지고 있는 '개인키' 를 통해 암호화와 복호화를 진행한다. 공개키로 암호화된 데이터를 개인키로만 복호화할 수 있고, 개인키로 암호화된 데이터를 공개키로만 복호화할 수 있다. 대칭키와 달리 서로 다르기 때문에 비대칭키라고도 부른다.

 

클라이언트가 서버로 공개키로 암호화된 데이터를 보낸다고 했을 때, 개인키는 서버만 가지고 있고 해커는 공개키만 가지고 있기 때문에 데이터를 복호화 할 수 없다.

 

공개키를 사용할 경우 해커로부터 안전한 이유

 

[문제점]

공개키를 복호화화는 과정에서 많은 컴퓨팅 비용이 발생하기 때문에 비용적인 단점이 존재한다. 또한, 처음 전송의 경우(클라이언트 > 서버) 안전한 보안을 제공하지만, 반대의 경우(서버 > 클라이언트)에는 모든 이들이 공개키를 가지고 있기 때문에 보안이 되지 않는다.  대칭키와 대조적으로 초기 전송시에 보안이 된다는 점을 기억해두자.

 

 

3.2. HTTPS 동작 방식

HTTPS를 설명하기 위한 기본적인 대칭키와 공개키에 대해 설명을 했다. 이제 본격적으로 HTTPS가 어떻게 동작하는지 알아보자.

설명을 하기에 앞서 대상을 조금 구체적으로 설정해서 설명해보겠다.

 

클라이언트  = 민수

서버 = 유튜브

SSL 인증 기관(CA) = 글로벌싸인(업체명)

(CA. Certificate Authority의 약자로, SSL 인증 업체를 가르킴)

동작방식의 큰 흐름은 아래와 같다

1. 유튜브(서버)는 글로벌싸인(CA)로 부터 SSL 인증서를 발급받는다.

2. 민수(클라이언트)가 유튜브(서버)로 부터 SSL 인증서를 받고 진위여부를 확인한다.

3. 민수(클라이언트)는 암호화에 필요한 대칭키를 만들고, 공개키 방식으로 대칭키를 공유한다.

4. 대칭키를 이용해서 데이터를 암호화 및 복호화하여 안전하게 데이터를 교환한다.

 

많이 복잡하니 단계별로 살펴보자.

 

1. SSL 인증서를 발급받는 과정

HTTP만 적용되어 있는 유튜브(서버)는 SSL 인증 기관으로 부터 SSL 인증서를 발급받아서 HTTPS를 적용하려한다. 발급 과정은 아래 순서대로 진행된다.

1.1. 유튜브(서버)는 유튜브의 공개키와 개인키를 생성한다.

1.2. 유튜브(서버)는 글로벌싸인(CA)의 기업 서비스를 이용하여 공개키와 공개키 암호화 방식을 업로드 한다.

1.3. 글로벌싸인(CA)는 아래 정보를 담은 인증서를 만들고, 해당 인증서를 글로벌싸인의 개인키로 암호화한다.

    - 인증 업체명 

    - 유튜브(서버)의 공개키
    - 공개키 암호화 방식

1.4. 암호화된 인증서를 유튜브(서버)에 발급해준다.

 

이 과정을 거치면 HTTP 였던 유튜브(서버)는 HTTPS가 적용된다.

 

 

2. SSL 인증서를 받고 진위여부를 확인하는 과정

HTTPS 가 적용된 유튜브(서버)를 민수(클라이언트)가 크롬을 사용해서 접속한다고 가정한 후, SSL 인증서가 어떻게 쓰이는지 살펴보자.

이 부분에서 공개키가 두 종류가 나오니 헷갈리지 않길 바란다.(CA 공개키 VS 유튜브 공개키)

 

 

 

2.1. 민수(클라이언트)가 유튜브(서버)로 부터 접속을 하려한다. 이때, 민수(클라이언트)의 요청에는 크롬의 암호화 기법 리스트, 랜덤 데이터(A)를 유튜브(서버)에 전송한다.

2.2. 유튜브(서버)는 암호화 리스트 중 하나를 선택하고, 랜덤데이터(B)를 생성해서 암호화된 SSL 인증서와 함께 민수(클라이언트)에게 전송한다.

2.3. 민수(클라이언트)의 크롬(브라우저)은 기본적으로 모든 CA의 리스트와 CA의 공개키를 가지고 있다. 인증 기관 리스트에 해당 SSL 인증 기관이 있는지를 확인하고, CA 공개키를 사용해서 암호화된 SSL 인증서를 복호화한다.

2.4. 복호화된 SSL 인증서에는 유튜브(서버)의 공개키가 존재한다. 

 

 

3. 암호화에 필요한 대칭키를 생성,  공개키로 대칭키를 공유하는 과정

현재 민수(클라이언트)는 SSL 인증서를 통해 유튜브(서버)의 공개키를 얻은 상황이다.

이전 1단계에서 민수(클라이언트)와 유튜브(서버)는 랜덤데이터 A,B를 서로 공유했는데, 이 랜덤데이터가 여기서 사용된다.

이 랜덤데이터를 조합해서 대칭키를 만들고, 유튜브(서버)의 공개키를 통해 유튜브(서버)에 안정적으로 전송한다.

아니..대칭키는 처음 공유과정에서 불안해서 안쓰는거 아녔음? 이렇게 생각할 수 있다. 이를 어떻게 해결하는지 살펴보자.

 

 

1. 민수(클라리언트)는 랜덤데이터 A,B를 조합해서 키를 생성한다.

2. 이 키를 이전 단계에서 얻었던 유튜브(서버)의 공개키를 활용해서 암호화 해서 유튜브(서버)에 보낸다.

3. 유튜브(서버)는 가지고 있던 개인키를 활용해서 복호화 하여 대칭키를 얻는다.

4. 이제는 민수(클라이언트)와 유튜브(서버) 둘 다 대칭키를 가지고 있게 된다.

 

(+ 대칭키의 경우 pre-master-secret-key > master-secret-key 라는 변환과정이 있지만 설명에서는 생략한다.)

 

대칭키는 처음 대칭키를 공유하는 과정에서 문제가 있었는데, 이를 공개키를 사용해서 대칭키를 안전하게 공유한 것이다. 또한, 모든 통신을 공유키로 하게 되면 비용적으로 부담이 될 수 있기 때문에 대칭키를 사용해서 이후 통신을 진행하는 것을 볼 수 있다. 이렇게 대칭키와 공개키를 같이 사용하여 서로의 단점을 보완하였다.

 

4. 대칭키를 이용해서 안전하게 데이터를 교환

이제 민수(클라이언트)와 유튜브(서버)는 대칭키를 제 3자에게 노출하지 않고 각자 가지고 있게 되었다. 이 대칭키는 세션키로 활용되어 세션이 종료될 때까지 데이터의 암호화 및 복호화를 위해 사용된다. 이제 안정적으로 데이터를 교환할 수 있게 되었다.

 

 

4. 실제 SSL 엿보기

 

예전에 SSL 은 나와는 먼 거리의 개념이었는데 , 웹사이트에 HTTPS를 내가 적용해야할 일이 생겨서 가까워졌다. 이때는 HTTPS를 적용하는 방식에만 초점을 맞췄어서 SSL에 관한 이해도는 많이 떨어졌는데, 이렇게 한 번 경험하고 SSL을 정리하니 좀더 친근하다.

회사에 들어가면 SSL을 세팅할 일이 있을지 모르겠지만, 개인 프로젝트로 EC2에 배포하고 HTTPS 를 적용할 때 아래 사이트에서 SSL 인증서를 구매해서 HTTPS를 적용하게 된다. 

가비아 > SSL 호스팅

 

앞서 HTTPS 동작 방식을 설명할 때 언급했던 SSL 인증업체인 글로벌싸인이 보인다. 글로벌싸인 뿐 아니라 Sectigo, Digicert 등 다른 업체도 확인할 수 있다.

호스팅 업체인 가비아는 이런 인증기관의 서비스를 중개해준다. 나중에 도메인 살 일이 있으면 여기서 사면 된다.

 

 

마치며

이번 글에서 HTTPS 란 무엇이며, 어떻게 동작하는지를 살펴보았다.

HTTPS 의 동작방식이 워낙 복잡해서 글이 길어졌지만, 제대로 이해할 수 있는 시간이 되었다.

 

 

 

 

출처

리차드 - HTTPS 한 스푼 (대칭키, 개인키, 공개키)

생활코딩 - HTTPS와 SSL 인증서

얄팍한 코딩사전 - HTTPS가 뭐고 왜 쓰나요?