HTTPS

박종원·2024년 12월 22일

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 동작 정리

  1. 웹 서버(사이트)는 서버 정보와 서버의 공개키를 인증 기관에 주면서 인증 요청을 한다.
  2. 인증 기관은 서버로 부터 받은 서버 정보와 공개키를 인증기관의 개인키로 암호화하여 인증서를 만든다.
  3. 인증 기관은 인증서에 대한 공개키를 브라우저들에게 제공하고, 서버에 인증서를 발급한다.
  4. 클라이언트가 웹 서버에 접속하면, 먼저 서버로부터 인증서를 받는다.
  5. 클라이언트는 인증 기관으로부터 받은 공개키를 사용해 인증서를 검증한다.
  6. 신뢰 할만한 인증기관이라면, 대칭키를 만들고, 인증서에 들어있던 서버의 공개키를 사용해 대칭키를 암호화하여 서버에 전송한다.
  7. 서버는 안전하게 클라이언트가 만든 대칭키를 받는다.
  8. 이제 클라이언트와 서버는 안전하게 공유된 대칭키를 통해 암호화 통신이 가능해진다.

0개의 댓글