HTTPS를 한 마디로 표현하면 ‘보안 기능의 껍질을 덮어쓴 HTTP’라 할 수 있다.
HTTPS(HyperText Transfer Protocol Secure)는 새로운 애플리케이션 계층의 프로토콜이 아닌, HTTP 통신하는 소켓 부분을 SSL(Secure Socket Layer)/ TLS(Transport Layer Security)라는 프로토콜로 대체한 것이다.
HTTPS = HTTP + SSL(Secure Sockets Layer) or TLS
즉, HTTPS는 HTTP protocol의 암호화된 버전(클라이언트와 서버 간의 모든 커뮤니케이션을 암호화 하기 위해 SSL이나 TLS를 사용)으로 클라이언트가 민감한 정보를 서버와 안전하게 주고받도록 해준다.
HTTP와 같이 암호화하지 않은 프로토콜의 문제점은 다음과 같다.
HTTP 는 평문 통신이기 때문에 도청이 가능하다.
평문
암호 알고리즘의 입력 대상으로, 암호화되지 않은 정보
TCP/IP 구조의 통신은 전부 통신 경로 상에서 엿볼 수 있기에 패킷을 수집하는 것만으로 도청할 수 있다. 평문으로 통신을 할 경우 메시지의 의미를 파악할 수 있기 때문에 암호화하여 통신할 필요가 생겼다.
통신 상대를 확인하지 않기 때문에 위장이 가능하다.
HTTP 에 의한 통신에는 상대가 누구인지 확인하는 처리는 없기 때문에 누구든지 요청을 보낼 수 있다. IP 주소나 포트 등에서 그 웹 서버에 액세스 제한이 없는 경우, 요청(request)이 오면 상대가 누구든지 무언가의 응답(response)를 반환한다.
SSL or TLS는 상대를 확인하는 수단으로 증명서를 제공한다. 이는 제 3자 기관(CA)에 의해 발행되는 것이기 때문에 서버나 클라이언트가 실재하는 사실을 증명한다. 이 증명서를 이용함으로써 통신 상대가 내가 통신하고자 하는 서버임을 나타내고 이용자의 개인 정보 누설 등의 위험성이 줄어들게 된다. 또한 클라이언트는 이 증명서로 본인 확인을 하고 웹 사이트 인증에서도 이용할 수 있다.
완전성(정보의 정확성)을 증명할 수 없기 때문에 변조가 가능하다.
즉, 서버 또는 클라이언트에서 수신한 내용이 송신측에서 보낸 내용과 일치하는 것을 보장할 수 없다. 중간자 공격이 일어나 요청이나 응답의 내용이 변조되더라도 이 사실을 알 수 없다.
중간자 공격(Man-in-the-Middle)
공격자가 도중에 요청이나 응답을 빼앗아 변조하는 공격
MD5, SHA-1 등의 해시값을 확인하는 방법과 파일의 디지털 서명을 확인하는 방법이 존재하지만, 확실히 확인할 수 있는 것은 아니므로 인증이나 암호화, 그리고 다이제스트 기능을 제공하는 HTTPS를 사용해야 안전하다.
HTTP는 원래 TCP와 직접 통신했지만, HTTPS에서 HTTP는 SSL 과 통신하고 SSL이 TCP 와 통신하게 된다. SSL을 사용한 HTTPS는 암호화와 증명서, 안전성 보호를 이용할 수 있다. 공통키 암호화 방식과 공개키 암호화 방식을 혼합한 하이브리드 암호 시스템을 사용한다.
하이브리드 암호 시스템
공통키를 공개키 암호화 방식으로 교환한 다음에, 다음부터의 통신은 공통키 암호를 사용하는 방식
TLS(Transport Layer Security)라는 이름은 SSL이 표준화 되면서 바뀐 이름이다.
그렇다면 서로에게 공유되는 공개키가 진짜인지는 어떻게 확인할까? 사실 이를 증명할 방법은 없다. 대신 이 증명을 대신해주는 공인된 제3자가 존재한다면 그럴듯 해진다. 이 제3자의 역할을 하는 것이 CA(Certificate Authority)이며, 이는 서버가 보낸 공개키가 정품인지 인증해주는 공인된 민간기업이다.
크롬, IE, 파이어폭스 등 모든 브라우저의 프로그램에는 CA의 목록이 내장되어 있다.
SSL 통신 과정은 크게 SSL Handshake → Session → Session 종료 순으로 진행된다.

서버와 클라이언트 간 탐색 과정이 먼저 이루어진다.
Session(세션)은 실제로 클라이언트와 서버가 데이터를 주고 받는 단계이다.
평문 통신에 비해서 암호화 통신은 CPU나 메모리 등 리소스를 더 많이 요구한다. 통신할 때마다 암호화를 하면 추가적인 리소스를 소비하기 때문에 서버 한 대 당 처리할 수 있는 요청 수가 상대적으로 줄어들게 된다.
하지만 최근에는 하드웨어의 발달로 인해 HTTPS를 사용하더라도 속도 저하가 거의 일어나지 않으며, 새로운 표준인 HTTP 2.0을 함께 이용한다면 오히려 HTTPS가 HTTP보다 더 빠르게 동작한다. 따라서 웹은 과거의 민감한 정보를 다룰 때만 HTTPS에 의한 암호화 통신을 사용하는 방식에서 현재 모든 웹 페이지에서 HTTPS를 적용하는 방향으로 바뀌어가고 있다.
참고 자료
HTTPS가 뭐고 왜 쓰나요? (Feat. 대칭키 vs. 비대칭키)
HTTPS는 HTTP보다 빠르다
[10분 테코톡] 리니의 HTTPS