HTTP 통신 과정

  1. 사용자가 웹 브라우저에 URL 주소 입력
  2. DNS 서버에 웹 서버의 호스트 이름을 IP 주소로 변경 요청
  3. 웹 서버와 TCP 연결 (3-way-handshake)
  4. 클라이언트가 서버에 요청
  5. 서버가 클라이언트에 데이터 응답
    1. HTTP Response Message
  6. 서버-클라이언트 간 연결 종료 (4-way-handshake)
  7. 웹 브라우저가 웹 문서 출력

HTTPS 통신 과정

  1. 인증서 준비
    1. 인터넷 사이트는 자신의 정보와 공개 키를 인증 기관에 제출함
    2. 인증기관은 검증을 거친 후 사이트 정보와 공개 키를 인증기관의 개인 키로 암호화함(= 사이트 인증서)
    3. 인증기관은 이 사이트 인증서를 인터넷 사이트에 제공 & 인증기관은 웹 브라우저에게 자신의 공개 키를 제공
  2. 클라이언트가 서버에 접속하여 Handshaking을 하며 서로를 탐색
    1. (Client Hello) 사용자가 웹 브라우저로 사이트에 접속을 요청함 이때 클라이언트는 서버에 다음과 같은 정보들을 보냄
      • 클라이언트 측에서 생성한 랜덤 데이터
      • 클라이언트가 지원하는 암호화 방식들(클라이언트가 전달한 암호화 방식 중에서 사이트 쪽에서도 사용할 수 있는 암호화 방식을 선택하게 하기 위해)
      • 세션 아이디(이전에 HandShake를 했다면, 비용과 시간을 절약하기 위해 기존의 세션을 재활용하게 되는데, 이때 사용할 연결에 대한 식별자를 사이트 측에 전송)
    2. (Server Hello) 사이트는 이에 대한 대답으로 다음과 같은 정보들을 보냄.
      • 사이트 측에서 생성한 랜덤한 데이터
      • 사이트가 선택한 웹 브라우저의 암호화 방식(이를 통해 암호화 방식 선택을 완료함)
      • 인증기관으로부터 발급받은 인증서(인증기관의 개인 키로 암호화한 사이트의 정보가 들어있음) & 사이트 공개키
    3. Client측에서 인증을 확인
      1. 웹 브라우저는 이전에 받은 인증 기관의 공개 키로 사이트 인증서를 해독하여 검증함
        1. 웹 브라우저에 내장된 CA 리스트를 확인(없으면 경고 메세지를 출력)
        2. 웹 브라우저 측에서 생성한 랜덤 데이터와 사이트 측에서 생성한 랜덤 데이터를 조함하여 pre master secret라는 대칭키를 생성
      2. 브라우저는 handshake에서 얻은 서버의 공개키로 pre master secret을 암호화하여 사이트로 보내게 됨
    4. Server측에서 인증을 확인**(Handshaking 종료)**
      1. 사이트는 자신의 개인키로 안호문을 해독하여 대칭키(pre master secret)를 얻음
  3. 데이터 전송
    1. Server와 Client는 서로 가진 대칭키를 통해 Session key를 생성함
    2. 이 Session key 를 이용하여 데이터를 대칭키 방식으로 암호화한 후 주고받게 됨
  4. 연결 종료
    1. 데이터 전송이 끝나면 SSL 통신이 끝났음을 서로에게 알린 후, 통신에 사용한 Session key를 폐기함