Hyper Test Transfer Protocol의 약자로 서버/클라이언트 모델을 따라 데이터를 주고받기 위한 프로토콜이다. HTTP는 인터넷에서 하이퍼넥스트를 교환하기 위한 통신규약으로 80번 포트를 사용한다. 따라서 HTTP 서버가 80번 포트에서 요청을 기다리고, 클라이언트는 80번 포트로 요청을 보내게 된다.
HTTP는 애플리케이션 계층의 프로토콜로, TCP/IP 위에서 동작한다. HTTP는 상태를 가지지 않은 Stateless 프로토콜이며 method, path, version of protocol, headers, body가 있다. 다만 http는 암호화되지 않은 평문 데이터를 전송하는 프로토콜이므로 http로 비밀번호나 주민등록번호를 주고받으면 제 3자가 조회할 수 있다는 문제가 있다. 따라서 이런 문제를 해결하기 위해 HTTPS가 나왔다.
Hyper Text Transfer Protocol over Secure Socket Layer의 약자로 HTTPS는 HTTP에 데이터 암호화가 추가된 프로토콜이다.
SSL(Secure Socket Layer : 보안소켓 계층)
신뢰할 수 있는 제 3자가 발행한 인증서로 별도로 발급한 암호화키를 가지고 발신자와 수신자가 서로 암호화된 통신을 하는 규악을 말한다.
HTTP는 HTTPS와 달리 443번 포트번호를 사용하고 있고 네트워크 상에서 중간에서 제 3자가 정보를 볼 수 없도록 암호화를 지원한다. 특히 대칭키 알고리즘과 공개키 알고리즘을 모두 사용하고 있다.
대칭키 암호화 방식은 클라이언트와 서버가 동일한 키로 암호화하고 복호화하는 방법이고, 키가 노출되면 매우 위험하나 연산속도가 빠르다. 비대칭키 암호화 방식은 1개 쌍으로 구성된 공개키와 개인키를 암호화와 복호화하는데 사용된다. 키가 노출되어도 안전하지만 연산속도가 느리다.
여기서 공개키는 모두에게 공개가능한 키고 개인키는 나만 가지고 알고 있어야하는 키다.
대칭키와 공개키 암호화 방식을 모두 사용하므로 빠른 연산속도를 가지고 안정성을 가진다. HTTPS 연결과정에서 먼저 서버와 클라이언트는 세션키를 교환하게 된다. 이때 세션키는 주고받는 데이터를 암호화하기 위해 사용하는 대칭키로 데이터 간 교환에는 빠른 연산속도가 필요하므로 세션키는 대칭키로 만들어진다.
이 세션키를 클라이언트와 서버가 교환할때, 여기서 비대칭키가 사용된다.
처음 연결 성립을 하는 과정에서 안전하게 세션키를 공유하기 위해 비대칭키를 사용하게 된다. 이후 데이터 교환과정에서 빠른 연산속도를 위해 대칭키가 사용된다.
서버가 비대칭키를 발급받을 때에는, 서버가 클라이언트와 세션키를 공유하기 위해 공개키를 생성해야하는데, 일반적으로는 인증된 기관에서 공개키를 전송해서 인증서를 발급받는다.
HTTPS는 안전하게 데이터를 주고받을 수 있으나 HTTPS를 사용하면 암호화와 복호화 과정이 필요하기에 HTTP보다 속도가 느리다. 또 인증서를 발급하고 유지하기 위한 추가비용이 발생한다. 따라서 민감한 데이터를 주고받는다면 HTTPS를 이용해야하나, 노출이 되어도 괜찮은 정보라면 HTTP를 이용하면 된다.