HTTPS란?

이건희·2023년 9월 2일
1

스터디에서 Https에 관해 얘기를 나누어 보았다. Https는 Http에서 보안성이 향상된 버전으로만 알고 있었는데, 정작 어떻게 보안성을 가지고, 어떻게 동작하는지는 몰라서 정리해보기로 결심했다.


Https란?

HyperText Text Transfer Protocol Secure로 Http에서 데이터 암호화가 추가된 프로토콜이다. 제 3자가 데이터를 볼 수 없도록 암호화를 지원한다.


대칭키와 비대칭키

Https는 대칭키와 비대칭키 암호화 방식 둘다 사용한다. 대칭키, 비대칭키 암호화 방식을 알아보자.

대칭키 암호화

  • 하나의 키로 암호화, 복호화 둘다 진행

  • 키가 노출되면 위험하지만 연산 속도가 빠름

비대칭키 암호화

  • 1개의 쌍으로 구성된 공개키와 개인키로 암호화, 복호화를 진행

  • 공개키로 암호화 된 것은 개인키로 복호화 가능하고, 개인키로 암호화 된 것은 공개키로 복호화 가능

  • 키가 노출되어도 비교적 안전하지만 속도가 느림

공개키(Public Key)는 말 그대로 모두에게 공개될 수 있는 키이고, 개인키(Private Key)는 개인 소유자만이 가지고 있어야 하는 키이다.

따라서 안전하게 데이터를 전송하려면, 그 사람의 공개키로 데이터를 암호화하고, 수신자는 자신의 개인키로 데이터를 복호화한다. 이렇게 되면 중간에 누가 데이터를 탈취하더라도 개인키가 없기 때문에 복호화가 불가능하다.


동작 방식

동작 원리

Https는 비대칭키 암호화 방식과 대칭키 암호화 방식 둘 다 사용한다고 언급하였다. 비대칭키 암호화 방식은 키가 노출 되어도 안전하지만 속도가 느리고, 대칭키 암호화 방식은 안전성이 떨어지지만 속도가 빠르다고 했다.

따라서 처음 연결 시에는 비대칭키 암호화 방식을 사용하고, 이후에는 대칭키 암호화 방식을 사용한다.

처음 Https 연결 과정에선 세션키를 교환한다.
이때 세션키란

  • 주고 받는 데이터를 암호화하기 위한 대칭키

서버와 클라이언트 양쪽에서 데이터를 암호화/복호화하려면 이 세션키를 둘 다 알고 있어야한다. 따라서 세션키를 비대칭키 암호화 방식으로 공유한다.

즉, 처음 연결 시, 대칭키인 세션키를 공유하기 위해 비대칭키 암호화 방식을 사용하여 세션키를 공유한다. 이후에는 세션키로 암호화/복호화를 진행한다.

동작 흐름

  1. 브라우저가 최초 연결 시도를 함

  2. 서버는 공개키(인증서)를 브라우저에게 넘겨줌

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

  4. 브라우저는 공개키를 저장하고, 서버의 공개키로 세션키를 암호화하여 서버로 전송

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

  6. 이제 서버와 브라우저는 동일한 세션키(대칭키)를 공유하므로 데이터 전달 시 세션키로 암호화와 복호화 진행


Https 발급 과정

위에서 서버가 클라이언트에게 공개키(인증서)를 전달한다고 하였는데, 이는 인증된 기관(Certificate Authority : CA)에 공개키를 전송하여 인증서를 발급 받는다.

  1. A 기업은 Http 기반에 에플리케이션에 Https를 적용하기 위해 공개키/개인키를 발급한다

  2. CA 기업에 돈을 지불하고 공개키를 저장하는 인증서를 발급을 요청

  3. CA 기업은 기업의 정보, 서버의 공개키를 기반으로 인증서를 생성하고, CA 기업의 개인키로 암호화하여 A 기업에 이를 제공한다.

  4. A 기업은 발급 받은 인증서를 클라이언트에게 전송한다.

  5. 클라이언트(브라우저)는 CA 기업의 공개키를 가지고 있어 인증서를 복호화하여 A 기업의 공개키를 얻는다

  6. 클라이언트(브라우저)는 복호화하여 얻는 A 기업의 공개키로 세션키를 암호화하여 A 기업에 전송한다.

  7. 이후 세션키는 A 기업의 공개키로 암호화 되었기 때문에 서버의 개인키로 복호화하여 세션키를 얻을 수 있다.


참고 출처

profile
광운대학교 정보융합학부 학생입니다.

0개의 댓글