HTTP란?
HTTP는 Hyper Text Transfer Protocol의 줄임말으로써 서버와 클라이언트간에 데이터를 주고 받는 프로토콜입니다. HTTP는 텍스트, 이미지,영상, JSON 등등 거의 모든 형태의 데이터를 전송할수 있습니다.
세상에 등장한지 벌써 30년이나 된 HTTP는 1997년 만들어진 HTTP/1.1가 가장 보편화 되어있으며, 현재는 HTTP/2를 거쳐 HTTP/3까지 개발된 상태입니다. TCP를 개선해서 만들어진 UDP가 HTTP/3 기술에 사용됩니다. 이번 포스팅은 HTTP와 HTTPS의 보안적 차이를 설명하는 것이 목적임으로 HTTP에 대한 자세한 설명은 차후의 포스팅에서 진행하겠습니다.
HTTP는 보안적으로 안전한가?
HTTP 통신은 클라이언트와 서버간의 통신에 있어서 별다른 보안 조치가 없기때문에 만약 누군가 네트워크 신호를 가로챈다면 HTTP의 내용은 그대로 외부에 노출됩니다. 중요 정보가 없는 소규모의 프로젝트라면 문제가 되지 않겠지만 고객의 개인정보나 비밀을 취급하는 대규모 서비스라면 큰 보안적 허점이 될 것입니다. 이런 문제를 해결하기 위해 등장한 것이 HTTPS입니다.
HTTPS란?
요즘은 거의 모든 사이트의 주소창에서 자물쇠 표시를 볼 수 있습니다. HTTPS가 적용되었다는걸 알려주는게 바로 저 자물쇠 입니다. HTTPS가 옛날부터 보편화되어있지는 않았습니다. 처음에는 전자상거래 등 고객의 중요 정보를 다루는 사이트 위주로 사용되었습니다.
그러다가 2014년 구글에서는 HTTP를 HTTPS로 변환하라고 권고하기 시작합니다. 귀찮은 작업을 시킬때는 보상이 있어야겠죠? 구글은 HTTPS를 적용하는 사이트들에게 SEO(검색 엔진 최적화)에 있어서 가산점을 주겠다고 합니다. 사용자 정보의 안전성도 보장받고, 사용자들의 웹사이트 유입도 늘릴수 있으니 HTTPS로 변환할 이유는 충분했을겁니다.
HTTPS는 어떤 방식으로 보안 이슈를 해결하는가?
기존의 HTTP 프로토콜은 전송계층의 TCP위에서 동작합니다. 여기서 SSL(Secure Sockets Layer)이라는 보안계층이 전송계층 위에 올라갑니다. HTTPS는 SSL 위에 HTTP를 얹어서 보안이 보장된 통신을 하는 프로토콜입니다. 이 통신 방식을 SSL 암호화 통신 이라고도 합니다. SSL 암호화 통신은 공개키 암호화 방식이라는 알고리즘을 통해 구현됩니다.
공개키 암호화 방식이란?
공개키 암호화 방식에는 공개키와 개인키 두 종류의 키가 존재합니다. 한쪽 키로 데이터를 암호화 했다면 오직 다른쪽 키로만 복호화를 할 수 있습니다.
클라이언트와 서버간의 요청과 응답 과정을 살펴보자
CA는 서버 운영 기업이 넘겨준 공개키를 인증서 발급자, CA의 이름 등과 함께 묶어서 CA가 가지고 있는 개인키로 암호화해서 SSL인증서로 발급해줍니다.
차후에 클라이언트에서 요청을 하면 서버는 클라이언트에게 SSL 인증서를 보냅니다. 브라우저(클라이언트)는 대표적인 CA들의 리스트와 그들의 공개키를 보유하고 있습니다. 만약 인증서에 적힌 CA의 이름과 브라우저가 소유하고 있는 CA 이름이 같다면 CA의 공개키로 SSL 인증서를 복호화 합니다.
이제 SSL내부에 들어있던 서버의 공개키를 가지고 요청을 암호화해서 서버에게 보냅니다. 서버측은 가지고 있는 개인키로 요청을 복호화하여 해석하고 응답은 다시 암호화 해서 보냅니다. 이 과정을 통해 보안성이 강한 통신을 할 수 있게 됩니다.
reference
https://mangkyu.tistory.com/98
https://jeong-pro.tistory.com/89