HTTP는 메시지를 평문으로 전송하므로 보안에 취약하다.
가령 인증 정보, 신용카드 정보와 같이 민감한 정보들이 그대로 노출되어 인터넷 상으로 전송된다.
HTTPS는 443 포트를 사용하며 SSL인증을 사용하여 HTTP 메시지를 암호화 함으로써 더 나은 보안을 제공한다.
HTTPS는 HTTP와 별도의 프로토콜이 아닌 HTTP아래에 SSL(Secure Sockets Layer)이라는 별도의 레이어를 갖춘 형태다.

HTTPS를 사용하면 다음과 같은 장점을 누릴 수 있다.
대칭 키(symmetric key)란 암호화(encryption)와 복호화(decryption)을 하나의 키로 수행하는 것을 뜻한다.
데이터를 송신하는 쪽과 수신하는 쪽 모두 같은 키를 사용하기 때문에 대칭 키라고 부른다.
대칭 키는 사용하기 쉽고 속도가 빠르지만 키를 교환하는 과정에서 탈취 당할 경우 전체 데이터가 노출된다는 단점이 있다.
대칭키 암호화 예시
대칭 키의 단점을 보완하기 위한 대안으로 공개 키 암호화가 있다.
공개 키 암호화는 암호화를 위한 공개 키(public key)와 복호화를 위한 개인 키(private key)로 이루어진다.
공개키를 사용해 암호화된 데이터는 오직 개인키를 사용해서만 복호화할 수 있으므로 중간에 데이터가 탈취되더라도 안전하다.
하나의 키로 암호화와 복호화를 모두 수행하는 대칭키와 다르게 2개의 서로 다른 키로 암호화 및 복호화 하므로 비대칭 키라고도 부른다.
공개 키를 사용하면 대칭 키보다는 느리지만 더 나은 보안성을 얻을 수 있다.
공개키 암호화 예시
디지털 서명(digital signature)은 네트워크에서 송신자의 신원을 증명하는 방법으로, 송신자가 자신의 비밀키로 암호화한 메시지를 수신자가 송신자의 공용 키로 해독하는 과정이다.
공개 키와 개인 키는 쌍을 이루기 때문에 개인 키로 암호화하면 공개 키로 복호화할 수 있다.
이를 이용하여 전자 서명의 일종인 디지털 서명을 생성할 수 있다.
디지털 서명 예시
신원 인증
서명이 유효하다면(공개 키로 복호화가 된다면) 개인 키를 보유한 송신자가 전송한 메시지임이 증명된다.
무결성 보장
데이터 전송 과정에서 변경이 일어나지 않았음이 보장된다. 중간에 데이터가 변경되었다면 서명이 무효화 되기 때문에 위변조 사실을 알 수 있다.
SSL(Secure Sockets Layer)은 넷스케이프 사에 의해 개발된 클라이언트와 서버 간 데이터를 안정하게 전송하기 위한 암호화 프로토콜이다.
TLS(Transport Layer Security)는 국제 표준 기구인 IETF(Internet Engineering Task Force)에 의해 제안되었으며, SSL3.0을 기반으로 발전시킨 것이다.
SSL과 TLS는 거의 호환되며 이러한 역사로 인해 많이 혼용되서 사용된다.
SSL은 Appication Layer와 TCP Layer 사이에서 동작한다.
HTTPS 통신은 SSL 인증서(공식적으로는 TLS 인증서)가 있는 웹사이트나 서버에서만 수행할 수 있다.
SSL 인증서는 사람의 신원을 보증하는 신분증과 같다.
SSL인증서는 디지털 서명을 통해 암호화, 인증, 무결성이라는 세 가지 주요 요소를 달성할 수 있다.
CA(Certificate authority)는 인증서를 발급하고 관리하는 신뢰할 수 있는 기관이다.
브라우저는 내부적으로 CA의 리스트를 가지고 있어 해당 사이트가 공인된 인증서를 사용하는지 확인할 수 있다.
인증서는 CA뿐만 아니라 사설 인증기관으로부터 발급 받거나 자체 서명 인증서를 만들 수 있다.
만약 CA에서 발급 받지 않은 인증서를 사용하는 경우 브라우저 주소 창에 안전하지 않다는 표시가 뜬다.
SSL 인증서는 다음 정보를 포함한다.
SSL/TLS는 대칭 키와 공개 키 방식을 모두 사용하여 통신한다.
공개 키만 사용할 경우 암호화 비용이 비싸다.
공개 키를 사용하여 대칭 키 교환 과정을 암호화함으로써 대칭키의 단점을 상쇄할 수 있다.
따라서 최초에 공개 키 방식을 사용해 대칭 키를 교환한 뒤 비용이 저렴한 대칭 키를 통해 암호화한다.
HTTPS를 통해 서버와 통신을 시작할 때마다 TCP handshake에 이어서 SSL Handshake가 발생한다.
SSL handshake 과정을 통해 공개 키를 사용해 암호화된 대칭 키를 교환한다.
(엄밀하게 말하면 대칭 키를 만들기 위한 재료를 교환한 뒤 클라이언트와 서버 각자가 생성한다.)
이러한 대칭 키를 세션 키라고 부른다. (하나의 세션에서만 사용하는 대칭 키)
SSl Handshake를 통해 생성한 세션 키를 사용해 대칭 키 암호화 방식으로 통신한다.
SSL/TLS Handsake
여기까지 평문 교환

SSL handshake 이후 세션 키를 사용하여 대칭 키 암호화 방식으로 데이터를 전송한다.
SSL/TLS Handsake
생활코딩, 『HTTPS와 SSL 인증서』
Geeky much!, 『Private key & Public key Encryption!』, Medium
D'CENT Academy, 『공개키 암호가 무엇인가요?』
업비트 투자자보호센터, 『디지털 서명이란 무엇인가?』
위키백과, 『디지털 서명』
GeeksForGeeks, 『Digital Signatures and Certificates』
GeeksForGeeks, 『Secure Socket Layer (SSL)』
CloudFlare, 『SSL이란 무엇입니까? | SSL 정의』
CloudFlare, 『SSL 인증이란 무엇입니까?』
CloudFlare, 『TLS 핸드셰이크의 원리는 무엇일까요? | SSL 핸드셰이크』
CloudFlare, 『세션 키란? 세션 키와 TLS 핸드셰이크』
Sandip Roy, 『Pre-master Secret vs. Master Secret vs. Private Key vs. Shared Secret』, Baeldung