HTTP는 Hypertext Transfer Protocol의 약자로 HTML을 전송하기 위한 통신규약이다.
HTTPS(Hypertext Transfer Protocol Over Secure Socket Layer)는 보안이 강화된 HTTP이다. HTTP는 암호화되지 않은 방법으로 데이터를 전송하기 때문에 서버와 클라이언트가 주고 받는 메시지를 보는 것이 매우 쉽다. 이를 보완한 것이 HTTPS 이다.
HTTPS 프로토콜을 사용하기 위해서는 인증 기관(CA)로부터 SSL 인증서를 발급받아야 한다.

초기 웹에서 데이터는 누구나 가로채면 읽을 수 있는 일반 텍스트 형태로 전송되었다. 이러한 문제로 인터넷 통신의 개인정보 보호, 인증, 데이터 무결성을 보장하기 위해 Netscape가 SSL을 개발하였다.
SSL(Secure Scoekts Layer)은 암호화 기반 인터넷 보안 프로토콜이다. 전달되는 모든 데이터를 암호화하고 특정한 유형의 사이버 공격도 차단한다. (SSL은 TLS 암호화의 전신이며 TLS는 SSL의 업데이트 버전이다)
SSL/TLS 를 사용하는 웹사이트 URL은 HTTP 대신 HTTPS가 사용된다.

SSL 인증서의 동작 원리를 이해하기 위해선 암호화 방식을 이해하고 있어야 한다.
암호화와 복호화에 같은 키를 사용하는 알고리즘을 의미한다. 대칭키는 동일한 키를 주고받기 때문에 속도가 매우 빠르지만 대칭키 전달과정에서 해킹 위험에 노출된다. 이를 보완하기 위해 비대칭키(공개키)라는 방식이 등장하였다.

암호화와 복호화에 사용하는 암호키를 분리한(서로 다른 두 개의 키) 알고리즘이다. 이 두 키는 공개키와 개인키라고 부르고 한 쌍으로 존재한다. 공개키는 누구에게나 공개될 수 있지만 개인키는 한쪽에서만 사용한다. 공개키로 암호화된 데이터는 해당 개인키로만 복호화할 수 있다.
서버에서 HTTPS 프로토콜을 사용하기 위해 SSL 인증서를 발급받는 과정은 아래와 같다.

- (서버) 공개키와 비밀키를 생성
- (서버 > CA) 서버는 인증서를 발급받기 위해 CA에 [서버의 공개키, 서버의 각종 정보] 제공
- (CA) 서버로부터 받은 정보를 담아 SSL 인증서를 발급
- (CA) 인증서를 서명하기위해 CA의 공개키와 비밀키를 생성, CA의 비밀키를 이용해 인증서를 서명
- (CA > 서버) 서명된 SSL 인증서를 서버에 전달

- 클라이언트(웹 브라우저)가 서버로 연결 시도
- 서버는 Certificate 패킷을 통해 서버의 SSL 인증서를 전달
- 클라이언트는 서버의 SSL 인증서를 검증 > CA의 공개키를 이용해 서명을 복호화 > 복호화하여 나온 해쉬 값과 공개키를 해쉬한 값이 일치한다면 인증서는 위조되지 않았고 해당 CA에서 발급되었다는 것을 검증
- 데이터를 암호화 하기위한 대칭키를 생성, 서버의 공개키로 대칭키를 암호화
- 서버로 암호화 된 대칭키를 전달
- 서버는 비밀키로 복호화하여 대칭키를 얻음
- 서버와 클라이언트는 대칭키를 통해 안전히 통신