HTTP
HTTP는 Hyper Text Transfer Protocol의 줄임말으로써 서버와 클라이언트간에 데이터를 주고 받는 프로토콜이다.
HTTP는 텍스트, 이미지,영상, JSON 등등 거의 모든 형태의 데이터를 전송할 수 있다.
세상에 등장한지 벌써 30년이나 된 HTTP는 1997년 만들어진 HTTP/1.1가 가장 보편화 되어있으며, 현재는 HTTP/2를 거쳐 HTTP/3까지 개발된 상태이다.
TCP를 개선해서 만들어진** UDP가 HTTP/3 기술에 사용된다.
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내부에 들어있던 서버의 공개키를 가지고 요청을 암호화해서 서버에게 보낸다. 서버측은 가지고 있는 개인키로 요청을 복호화하여 해석하고 응답은 다시 암호화 해서 보낸다. 이 과정을 통해 보안성이 강한 통신을 할 수 있게 된다.