HTTPS
란 Hyper Text Transfer Protocol Secure Socket layer
의 약자이다.
HTTPS
는 HTTP
요청을 SSL
혹은 TLS
라는 알고리즘을 이용해, HTTP
통신을 하는 과정에서 데이터를 암호화하여 전송하는 방법이다. HTTPS
는 다음을 목적으로 사용한다.
첫번째는 제 3자가 서버와 클라이언트가 주고받는 정보를 탈취할 수 없도록 하는 것이다.
이를 위해 서버와 클라이언트는 서로가 합의한 방법으로 데이터를 암호화하여 주고받는다. 따라서 중간에 제 3자에게 데이터가 탈취되더라도 그 내용을 알아볼 수 없다. HTTP
는 요청 및 응답이 탈취된다면 아래와 같이 전달되는 데이터의 내용을 제 3자가 그대로 확인할 수 있다.
아래의 사진은 데이터를 전송하는 요청을 wireshark
라는 패킷 분석 프로그램을 이용하여 캡처한 사진이다.
하지만 데이터를 암호화하여 전송하는 HTTPS
를 사용한다면 비밀번호와 같은 중요한 데이터가 유출될 가능성이 HTTP
보다 현저히 적어진다.
아래의 사진은 위 사진과 동일한 요청을 프로토콜만 HTTPS
로 변경했을 때의 데이터를 캡처한 사진이다.
요청이 암호화되어 전송되기 때문에 정확한 키로 복호화하기 전까지는 어떤 내용인지 알 수 없다.
HTTPS
에서는 클라이언트와 서버가 데이터를 암호화하여 주고받기 위해 비대칭키 방식과 대칭키 방식을 혼용하여 사용한다. 서버와 클라리언트가 통신할 때, 대칭키 방식은 양쪽이 공통의 비밀 키를 공유하여 데이터를 암호화 및 복호화하는 것, 비대칭키 방식은 각각 공개키와 비밀키를 가지고 상대가 나의 공개키로 암호화한 데이터를 개인이 가진 비밀키로 복호화하는 것을 의미한다.
클라이언트와 서버가 데이터를 주고받을 때는 대칭키를 사용한다. 비대칭키 알고리즘은 대칭키 알고리즘보다 훨씬 복잡하기 때문에 대칭키를 사용하여 데이터를 암호화 및 복호화하는 것이 훨씬 컴퓨터에 부담을 덜 주기 때문이다. 하지만 대칭키를 서로 주고 받는 과정에서부터 정보가 탈취된다면 모든 데이터가 복호화가 가능하게 될 것이다.
그래서 HTTPS
는 이러한 대칭키를 주고받을 때는 비대칭키 방식으로 주고 받도록 한다. 비대칭키는 공개키로 암호화한 정보는 개인이 가진 비밀키로만 풀 수 있기 때문에 중간에 대칭키가 탈취되더라도 개인키가 없이는 이를 복호화할 수 없기 때문이다.
HTTPS
의 또다른 특징 중 하나는 브라우저가 서버의 응답과 함께 전달된 인증서를 확인할 수 있다는 점이다.
이러한 인증서는 서버의 신원을 보증하여 우리가 접속한 플랫폼이 해커가 정교하게 따라한 가짜 플랫폼이 아님을 보장해주는 역할을 한다.
이때 이를 보증할 수 있는 제 3자를 Certificate Authority
, CA
라고 부른다.
CA
는 인증서를 발급해주는 엄격하게 공인된 기관들을 말한다. 이러한 CA
들은 서버의 공개키와 정보를
CA
의 비밀키로 암호화하여 인증서를 발급한다.
서버가 클라이언트에게 CA
에서 발급받은 인증서를 전달하면 클라이언트는 OS 또는 브라우저에 미리 내장되어 있던 CA
리스트를 통해 브라우저에서 인증된 CA
에서 발급받은 인증서인지 먼저 확인한다. 만약 인증된 CA
에서 발급한 인증서가 아니라면 아래와 같이 화면에 경고창을 띄워 서버와 연결이 안전하지 않다는 화면을 보여준다.
그 후 인증서가 확인되었다면 브라우저에 제공된 해당 CA
기관의 공개키로 서버 인증서를 복호화한다.
이렇게 복호화해 얻은 공개키로 클라이언트는 서버를 믿을만한 대상인지 신뢰할 수 있다.
따라서 브라우저는 인증서의 도메인과 데이터를 제공하는 서버의 도메인을 비교할 수 있기 때문에 '중간자 공격'을 감지하여 보안 위협으로부터 사용자 및 사용자의 데이터를 보호할 수 있다. 또한 위와 같은 경고를 직접 보여줌으로써 브라우저들은 인증된 CA
가 발급한 인증서를 이용하여 데이터를 제공하는 안전한 서버를 사용자가 사용하도록 유도한다.