오늘은 HTTPS 통신에 대해 자세히 살펴보자.
우선 간단히 HTTP를 설명하자면,
HTTP
HTTP는 Hyper Text Transfer Protocol의 줄임말로, 애플리케이션 계층의 서버-클라이언트 통신 규약이다. HTTP는 HTML 문서와 같은 리소스를 가져올 수 있도록 하는 통신 약속인데 웹에서 이루어지는 모든 데이터 교환의 기초이며 클라이언트-서버 프로토콜이기도 하다.
하지만 HTTP에게는 한 가지 문제가 있었으니... 바로 취약한 보안이었다.
HTTP는 Man in the middle 공격에 취약한 특징을 가지고 있다. 왜냐하면 중간에서 데이터를 탈취하면 그 내용을 바로 확인 할 수 있기 때문이다.
HTTPS
위와 같은 HTTP의 보안적 위험을 해결하기 위해 고안된 것이 바로 HTTPS이다.
HTTPS는 데이터를 전송할 때 내용을 암호화하기 때문에 설사 데이터를 탈취 당하더라도 안의 내용을 확인할 수 없기 때문에 비교적 안전하다.
암호화 과정
HTTPS의 암호화는 대칭키와 비대칭키 방식을 모두 이용한다. 그렇다면 대칭키와 비대칭키는 무엇일까?
대칭키: 암호화와 복호화 모두 같은 키를 사용한다. 장점은 암/복호화가 빠르다는 것이지만 동일한 키를 사용하기 때문에 만약 키를 보내는 과정에서 키가 탈취당한다면 보안상 문제가 발생한다.
비대칭키: 공개키와 개인키로 나누어 공개키로 암호화 한 데이터는 개인키로만 복호화 할 수 있다. 공개키는 외부에 노출이 되더라도 결국 내용을 확인할 수 있는 컴퓨터는 개인키를 가진 컴퓨터이기 때문에 보안면에서 우수하다. 하지만 대칭키에 비해 다소 속도가 느리다.
HTTPS는 대칭키와 비대칭키의 장단점을 모두 이용해 클라이언트-서버 통신을 사용한다. 과정은 아래와 같다.
1. 브라우저는 서버에 데이터를 요청한다.
2. 서버는 CA 인증이 붙은 공개키(인증서)를 브라우저에게 보낸다.
3. 브라우저는 CA 인증이 신용할 수 있는지 CA 공개키로 확인하고 세션키(대칭키)를 생성한다.
4. 브라우저는 세션키(대칭키)를 서버로부터 받은 공개키로 암호화한다.
5. 암호화된 세션 키(대칭키)를 서버에게 보낸다.
6. 서버는 개인키로 암호화된 세션키(대칭키)를 해독한다.
7. 이후 암호화/복호화는 대칭키를 이용하게 된다.
그렇다면 CA는 무엇일까
CA는 웹사이트가 신뢰할 만한 곳인지 인증을 맡아하는 인증 사업자이다. 웹브라우저는 기본적으로 신뢰할 수 있는 CA리스트와 공개키를 가지고 있기 때문에 서버로부터 온 공개키가 신뢰할 수 있는 공개키인지를 CA 인증으로 가늠할 수 있게 되는 것이다.
반면 서버의 경우 미리 CA에 자신의 공개키를 넘겨주고 해당 공개키에 CA의 개인키를 이용한 인증을 받아야 한다.
'HTTP' 카테고리의 다른 글
[Cookie] 브라우저가 쿠키 저장에 실패한다면 (0) | 2023.12.13 |
---|---|
[HTTP] What happens when you type Google? (0) | 2022.03.21 |
[Socket.io] socket.io 룸 생성과 메세지 전달 프로세스 (0) | 2022.03.11 |
[Socket.io] Socket.io란 무엇인가? (0) | 2022.03.05 |
HTTP MIME (0) | 2021.11.18 |