HTTPS (Hypertext Transfer Protocol over Secure Socket Layer)
HTTPS 개요
- HTTP는 평문(plain text)으로 메세지를 교환하기 때문에 도청이 가능하다.
- HTTP를 사용하면서 통신 보안이 필요하다면 HTTS를 사용하면 된다.
- HTTPS는 HTTP의 보안 버전으로 SSL(TLS) 위에서 동작하는 HTTP다.
- HTTPS를 통해 전송되는 모든 HTTP 메세지는 SSL 계층을 거쳐 암호화, 복호화 된다.
HTTPS Scheme
- 보안 없는 일반적인 HTTP는 URL의 스킴 접두사가 아래와 같이 http이다.
- 보안이 되는 HTTPS는 URL의 스킴 접두사가 다음과 같이 https이다.
- 웹 브라우저 등의 클라이언트는 웹 리소스에 대한 트랜잭션 수행을 요청받으면 URL의 스킴을 검사한다.
- 만약 URL이 http 스킴을 갖고 있다면 클라이언트는 서버의 80번 포트로 연결하고 HTTP 요청을 한다.
- 만약 URL이 https 스킴을 갖고 있다면 클라이언트는 서버의 443번 포트로 연결하고, 서버와 바이너리 포멧으로 된 몇몇 SSL 보안 매개변수를 교환하면서 SSL 핸드셰이크를 한 뒤 암호화된 HTTP 요청을 한다.
동작 과정

HTTP 동작과정
- 클라이언트는 웹 서버의 80번 포트로 TCP 커넥션을 연다.
- HTTP 요청 메세지를 보낸다.
- 서버로부터 HTTP 응답 메세지를 받는다.
- TCP 커넥션을 닫는다.
HTTPS 동작과정
- 클라이언트는 웹 서버의 443 포트로 TCP 커넥션을 연다.
- TCP 연결이 되면 클라이언트와 서버는 암호법 매개변수와 교환 키를 협상하면서 SSL 계층을 초기화 한다. (SSL 핸드 셰이크)
- SSL 초기화가 완료되면, 클라이언트는 HTTP 요청 메세지를 SSL 계층에 보낸다.
- SSL 계층에서 클라이언트의 HTTP 요청 메세지는 TCP로 보내지기 전에 암호화 된다.
전자 인증서
- 전자 인증서는 신뢰할 수 있는 기관(CA)로부터 보증 받은 호스트의 정보를 담고 있다.
서버 인증을 위한 인증서 사용
- HTTPS 동작 과정에서 SSL 핸드셰이크를 살펴보면, 먼저 클라이언트는 서버의 인증서를 받아서 서버를 검증하는 절차를 거친다.
- 서버가 보내온 인증서가 신뢰할 수 있는 공인 기관에 의해 서명 되었는지 공인 기관의 공개키로 검증함으로써 서버의 신뢰성을 확인하는 것이다.
- 인증서는 아래와 같은 정보를 포함한다.
- 웹 사이트의 이름과 호스트 명
- 웹 사이트의 공개키
- 서명 기관의 이름
- 서명 기관의 서명
동작 과정
- 클라이언트는 HTTPS를 통해 서버에 접속한다.
- 서버는 전자 인증서를 클라이언트에게 보낸다. (만약 서버가 인증서를 갖고 있지 않다면, 연결은 실패한다.)
- 클라이언트는 전자 인증서를 받으면 받으면 인증서에 들어있는 서명을 통해 서명 기관을 검사한다. 해당 기관이 공공연하게 신뢰할만한 서명 기관이라면
- 클라이언트는 그것의 공개키를 알고 있을 것이고, 공개키를 사용하여 전자 서명을 검증한다.
- 만약 서명 기관이 모르는 곳이라면, 클라이언트는 그 서명 기관을 신뢰해야할지 확신할 수 없기 때문에 사용자가 해당 기관을 신뢰하는지 확인하기 위한 대화상자를 보여준다.
HTTPS 동작 정리
- 웹 서버(사이트)는 서버 정보와 서버의 공개키를 인증 기관에 주면서 인증 요청을 한다.
- 인증 기관은 서버로 부터 받은 서버 정보와 공개키를 인증기관의 개인키로 암호화하여 인증서를 만든다.
- 인증 기관은 인증서에 대한 공개키를 브라우저들에게 제공하고, 서버에 인증서를 발급한다.
- 클라이언트가 웹 서버에 접속하면, 먼저 서버로부터 인증서를 받는다.
- 클라이언트는 인증 기관으로부터 받은 공개키를 사용해 인증서를 검증한다.
- 신뢰 할만한 인증기관이라면, 대칭키를 만들고, 인증서에 들어있던 서버의 공개키를 사용해 대칭키를 암호화하여 서버에 전송한다.
- 서버는 안전하게 클라이언트가 만든 대칭키를 받는다.
- 이제 클라이언트와 서버는 안전하게 공유된 대칭키를 통해 암호화 통신이 가능해진다.