https://naver.com
, http://localhost:3000
두 uri 모두 매우 흔하게 접할수 있다.물론 기본적인 도메인이 다르긴하지만 http
, https
부분도 다르다는걸 확인할수있다. 그렇다면 두 프로토콜간 어떤 차이가 있는지 알아보자.
먼저 HTTP란 Hyper Text Transfer Protocol로 클라이언트와 서버간의 통신을 원활하게 하기 위한 통신 규약(protocol) 이다.
인터넷 초기부터 사용되던 프로토콜로 데이터를 전송하는 용도로 주로 사용되었다. 그런데 이 http는 데이터 전송을 할때 암호화되지 않고 일반 텍스트 형식으로 전달을 한다.
따라서 중간에 누군가가 스니핑, 피싱등의 방법으로 데이터를 가로채게 된다면 전송하려던 데이터 그대로 확인이 가능하며, 위/변조 또한 매우 쉽다는 단점이 있다. 전송하려는 데이터가 개인정보와 관련된다면 문제점은 더더욱 커진다.
스니핑 : 네트워크 상에서 통신간 사용되는 데이터패킷을 제 3자가 엿보는것
피싱 : 사용자가 신뢰할만한 제3자로 위장하여 중요 정보를 뺴내는 것
이러한 문제점을 해결하기위해서 사용되는것이 바로 HTTPS이다.
Hyper Text Transfer Protocol Secure socket layer의 약자로써 기존의 HTTP에서 전송하는 데이터를Secure Socket Layer(SSL/TSL) 로 암호화하여 전송한다는 뜻이다.
그럼 대체 SSL/TSL이 뭐길래 기존의 HTTP의 단점을 보완한다는 것인지 알아보자.
SSL이란 간단하게 말하면 서버와 클라이언트간의 데이터 암호화 프로토콜이며,HTTP의 동작계층 바로 밑에서 보안을 제공하여 동작한다. (TLS는 SSL의 업데이트 버전이다)
SSL은 인증서안에 담겨있는 공개키와 개인키를 기반으로 사용된다.
여기서 말하는 인증서는 안전한 통신을 위해 암호화와 신원 확인 후 연결을 진행한다. 당연히도 인증서 자체도 신뢰가 있어야 하기 때문에 CA(certificate Authority)라는 제3기관에서 발급된다.
인증서 안에는 공개키, 개인키, 발급자의 정보가 들어있다.
공개키로 암호화를 진행하고, 개인키로 복호화를 진행한다. 이때, 암호화된 데이터는 사용된 공개키와 매칭되는 개인키 (서버에만 존재한다.)로만 복호화가 가능하다.
즉, 기존의 http통신에서 ssl인증서를 통해 데이터를 암호/복호화하여 통신하는 것이 바로 https라고 할수 있다.