HTTP와 HTTPS의 동작 과정
How do http and https work?
HTTP와 HTTPS에 대한 설명은 이전글에 있습니다.
HTTP의 동작 과정
- 사용자가 url 주소 입력
- DNS 서버에 의해 서버의 ip 주소 찾음
- 웹서버와의 TCP 연결 시도
- 3 way handshake
- 웹서버와 http메시지 주고받음
- 클라이언트가 서버에게 요청(request)을 보내면, 서버가 클라이언트에게 응답(response) 전송
- 웹서버와 TCP연결 해제
대칭키 암호키와 비대칭키 암호화
먼저 HTTPS의 동작 과정을 알아보기전에 대칭키 암호화와 비대칭키 암호화에 대해 간단히 알아보자
- 대칭키 암호화
- 클라이언트와 서버가 동일한 키를 사용해 암호화/복호화 진행
- 하나의 키를 사용하기 때문에 연산 속도가 빠르지만 키가 노출되면 매우 위험
- 비대칭키 암호화
- 1개의 쌍으로 구성된 공개키와 개인키를 암호화/복호화 하는데 사용
- 키가 노출되어도 비교적 안전하지만 연산 속도가 느리다.
- 공개키: 모두에게 공개가능한 키
- 개인키: 나만 알고 있는 키
HTTPS의 동작 과정
HTTPS는 대칭키 암호화와 비대칭키 암호화를 모두 사용하여 빠른 연산 속도와 안정성을 모두 가지고 있다. HTTPS 연결 과정(Hand-Shaking)에서는 먼저 서버와 클라이언트 간의 세션키를 교환해야 하는데 여기서 세션키는 주고 받는 데이터를 암호화하기 위해 사용되는 대칭키이며, 데이터 간의 교환에는 빠른 연산 속도가 필요하므로 세션키는 대칭키로 생성한다. 이 세션키를 서버와 클라이언트가 안전하게 교환하는 과정에서 비대칭키가 사용된다.
- 클라이언트가 서버로 최초 연결 시도
- 서버는 공개키를 브라우저에게 넘겨줌
- 클라이언트는 세션키를 생성한 후 서버의 공개키로 암호화하여 서버로 전송
- 서버는 개인키로 암호화된 세션키를 복호화하여 세션키를 얻음
- 클라이언트와 서버는 동일한 세션키를 공유하므로 데이터를 서로 암호화/복호화 가능
추가로 봐야되는 부분
HTTPS 동작 과정중 2번을 보면 공개키를 브라우저에게 넘겨주는데 그냥 공개키만 넘겨버리는 것이 아니고 추가적인 과정이 있다. 서버는 클라이언트와 세션키를 공유하기 위한 공개키를 생성해야 하는데, 일반적으로 인증된 기관(Certificate Authority)에 공개키를 전송하여 인증서를 발급받는다. 자세한 과정을 한번 보자
- A기업은 HTTP 기반의 애플리케이션에 HTTPS를 적용하기 위해 공개키/개인키를 발급
- CA 기업에게 돈을 지불 후, 공개키를 저장하는 인증서 발급 요청
- CA기업은 CA기업의 이름, 서버의 공개키, 서버의 정보 등을 기반으로 인증서 생성후, CA 기업의 개인키로 암호화하여 A기업에게 제공
- A기업은 클라이언트에게 암호화된 인증서를 제공
- 클라이언트는 CA기업의 공개키를 미리 다운받아 갖고 있어, 암호화된 인증서를 복호화함
- 인증서안의 A기업의 공개키로 세션키를 공유
이렇게 그냥 공개키를 넘기는 것이 아닌 인증서를 넘기게 되면 인증서는 CA의 개인키로 암호화되었기 떄문에, 신뢰성을 확보할 수 있다. 또한 브라우저에는 인증된 CA 기관의 정보들이 사전에 등록되어 있어 인증된 CA기관의 인증서가 아닌 경우와 된 경우 다음과 같은 형태로 브라우저에서 보여진다.
그렇다면 언제 HTTP, HTTPS?
HTTPS는 HTTP보다 안전하게 데이터를 주고 받을 수 있지만 암호화/복호화 과정이 추가되어있기 때문에 HTTP보다 속도가 느리다. 또한 인증서를 발급하고 유지하기 위한 추가 비용이 발생한다. 그래서 개인 정보와 같은 민감한 데이터를 주고 받아야 한다면 HTTPS를 이용하면 되고, 노출이 되어도 되는 단순한 정보를 주고 받는다면 HTTP를 이용하면 되겠다.
참고: https://mangkyu.tistory.com/98
*틀린 부분이 있으면 언제든지 말씀해 주시면 공부해서 수정하겠습니다.