설명 순서는 다음과 같습니다.
1. HTTP란?
2. HTTPS가 등장하게 된 배경
3. 두 가지 암호화 방식, 대칭키와 비대칭키
4. HTTPS를 이용한 전체적은 요청-응답 흐름
1. HTTP란?
- HTTP란 Hyper Text Transfer Protocol의 약자입니다
- 이 뜻은 Hyper Text를 전달하는데 사용되는 Protocol이란 뜻입니다
- Hyper Text란 단순한 텍스트를 넘어 링크로 다른 문서로 넘어갈 수 있는 텍스트와 여러 멀티미디어 요소로 이루어진 문서를 말합니다
- 이러한 Hyper Text는 HTML이라는 마크업 언어로 작성됩니다
- Protocol은 약속을 의미합니다
- 둘 사이에 메시지나 데이터를 주고받을 때 정해진 형식입니다
- 따라서, HTTP는 HyperText를 요청하고 전달받는데 정해진 규칙을 의미합니다
- 요즘 HTTP는 단순히 HyperText를 넘어 이미지, JSON 등 다양한 데이터를 주고받을 때 사용합니다
2. HTTPS의 등장배경
- 우리는 네트워크 위에서 HTTP 규약에 맞는 요청 및 응답메시지를 주고받을 수 있게 되었습니다
- 하지만, HTTP는 암호화를 하지 않고 평문으로 전송하기 떄문에, 네트워크 상에서 데이터를 탈취당할 수 있습니다
- 그래서 보안에 취약한 HTTP를 해결하기 위해 HTTPS가 등장하게 되었습니다
- HTTPS는 HTTP Secure의 약자로 HTTP에 보안을 더한 것입니다
- HTTPS는 데이터를 암호화하는 방식으로 보안을 취득합니다
3. 두 가지 암호화 방식, 대칭키와 비대칭키
- 그렇다면 어떻게 HTTPS는 데이터를 암호화할까요?
- 클라이언트가 서버로 암호화된 메시지를 보내고 서버는 받은 암호화된 메시지를 복호화 해야합니다
① 대칭키
- 가장 간단한 방법은 클라이언트와 서버 모두 둘만 아는 비밀스런 암호화된 방식을 알고 있으면 됩니다
- 예를 들어 메시지가 a -> b, b -> c, c -> d ... 로 암호화됐다면, 복호화는 반대 방식으로 진행하면 되기 때문입니다
- 이렇게 둘 모두 같은 암호화된 방식(키)를 가지고 있다고 해서 이러한 방법은 '대칭키'라고 불립니다
- 하지만, 네트워크를 통해 통신하는 클라이언트와 서버는 직접 만나지 않기에 둘만 아는 '키'를 공유할 수 없습니다
② 비대칭키
- 이후 '비대칭키' 암호화 시스템이 등장했습니다
- 비대칭키는 공개키와 개인키로 이루어져있습니다
- 클라이언트-서버 구조에서 공개키는 클라이언트 모두에게 공개된 키이고 개인키는 서버만 가지고 있는 키입니다
- 비대칭키의 암호화 방식은 공개키로 암호화된 메시지는 개인키로만 복호화할 수 있고, 개인키로 암호화된 메시지는 비공개키로만 복호화할 수 있는 것입니다
- 그래서 클라이언트는 요청 메시지를 서버의 공개키를 이용해 암호화를 하고 서버는 개인키를 이용해서 메시지를 복호화합니다
- 이렇게 되면 클라이언트의 요청 메시지가 탈취당하더라도 복호화할 수 없습니다
4. HTTPS를 이용한 전체적인 요청-응답 흐름
- HTTPS는 HTTP와 보안 계층인 SSL/TLS 프로토콜이 결합된 것입니다(TLS는 SSL의 업데이트 버전이므로, 둘은 같다고 봐도 무방함)
- 요청 응답 흐름
① 서버는 CA(Certificate Authority)로 부터 CA의 개인키로 암호화된 '인증서'를 발급받습니다 (이유 : 클라이언트가 서버와 통신할 때, 그 서버가 신뢰할 수 있는 서버임을 증명하기 때문임)
② 클라이언트는 서버와 통신하기 전 접속 요청을 보냅니다
③ 서버는 인증서를 클라이언트에 전송합니다
④ 클라이언트는 CA의 공개키르 인증서를 복호화하고 서버를 신뢰할 수 있습니다
⑤ 클라이언트는 인증서안에 있는 서버의 공개키로 임의의 대칭키를 생성해 암호화합니다
⑥ 클라이언트는 암호화한 대칭키를 서버에 보내면, 클라이언트와 서버는 같은 키인 '대칭키'를 갖게됩니다
⑦ 이제 이 대칭키를 이용해서 서버와 클라이언트는 안전하게 데이터를 주고받을 수 있습니다
- 데이터를 바로 공개키로 암호화하지 않는 이유는 대칭키를 이용해서 암호화하고 복호화할 때 더 빠르기 때문입니다
HTTP부터 HTTPS까지 알아보며, 대칭키와 공개키에 대해서도 알아볼 수 있었습니다.
'네트워크' 카테고리의 다른 글
OSI 7계층 (0) | 2023.09.12 |
---|---|
브라우저에 URL을 입력하면 일어나는 일 (0) | 2023.09.12 |
TCP, UDP (0) | 2023.08.08 |
쿠키, 세션 (0) | 2023.08.03 |
3 way handshake, 4 way handshake (0) | 2023.08.02 |