Skip to main content

HTTPS 동작과정

Network_https1

  1. 클라이언트가 Client Hello 메시지를 송신하면서 SSL 통신을 시작합니다. 메시지에는 클라이언트가 제공하는 SSL의 버전을 지정하고, 암호 스위트(Cipher Suite)로 불리는 리스트(사용하는 암호화의 알고리즘이나 키 사이즈 등) 등이 포함되어 있습니다.
  2. 서버가 SSL 통신이 가능한 경우에는 Server Hello 메시지로 응답합니다. 클라이언트와 같이 SSL 버전과 암호 스위트를 포함합니다. 서버의 암호 스위트 내용은 클라이언트에서 받은 암호 스위트의 내용에서 선택된 것입니다.
  3. 서버가 Certificate 메시지를 송신합니다. 메시지에는 공개키 증명서가 포함되어 있습니다.
  4. 서버가 Server Hello Done 메시지를 송신하여 최초의 SSL 네고시에이션 부분이 끝났음을 통지합니다.
  5. SSL의 최초 네고시에이션이 종료되면 클라이언트가 Client Key Exchange 메시지로 응답합니다. 메시지에는 통신을 암호화하는데 사용하는 Pre-Master secret이 포함되어 있습니다. 이 메시지는 3의 공개키 증명서에서 꺼낸 공개키로 암호화되어 있습니다. (서버는 가지고 있는 기밀키로 메시지를 복호화하여 Pre-Master secret를 확인합니다. 이제 클라이언트와 서버 모두가 Pre-Master secret 값을 알고 있으며 이 Pre-Master secret으로부터 클라이언트와 서버는 대칭 세션키를 생성합니다.) 즉, Pre-Master secret"는 비대칭키 암호화를 통해 안전하게 교환되며, 이 값을 바탕으로 클라이언트와 서버는 동일한 세션키들을 독립적으로 생성할 수 있습니다. 이렇게 하면 세션키는 직접 네트워크를 통해 교환되지 않기 때문에 중간자 공격(man-in-the-middle attack)의 위험에서 보호받게 됩니다.
  6. 클라이언트는 Change Cipher Spec 메시지를 송신합니다. 이 메시지는 이 메시지 이후의 통신은 암호키를 사용해서 진행한다는 것을 나타내고 있습니다.
  7. 클라이언트는 Finished 메시지를 송신합니다. 이 메시지는 접속 전체의 체크 값을 포함하고 있습니다. 네고시에이션이 성공했는지 어떤지는 서버가 이 메시지를 올바르게 복호화할 수 있는지 아닌지가 결정됩니다.
  8. 서버에서도 마찬가지로 Change Cipher Spec 메시지를 송신합니다.
  9. 서버에서도 마찬가지로 Finished 메시지를 송신합니다.
  10. 서버와 클라이언트의 Finished 메시지 교환이 완료되면 SSL에 의해서 접속은 확립됩니다. 물론 통신은 SSL에 의해서 보호되고 있습니다. 이제부터는 애플리케이션 계층의 프로토콜에 의해 통신을 합니다. 즉, HTTP 리퀘스트를 송신합니다.
  11. 애플리케이션 계층의 프로토콜에 의한 통신입니다. 즉, HTTP 리스폰스를 송신합니다.
  12. 마지막에 클라이언트가 접속을 끊습니다. 접속을 끊을 경우에는 close_notify 메시지를 송신합니다. 그림에서는 생략되었지만, 그 후에 TCP FIN 메시지를 보내 TCP 통신을 종료합니다.

비대칭키는 주로 Pre-Master secret을 안전하게 교환하는데 사용되며, 그 이후의 통신은 대칭키(세션 키)를 사용하여 암호화됩니다.

요약

통신 초기에는 클라이언트(브라우저)와 서버는 처음에 비대칭 암호화를 사용해서 보안 연결을 설정하고 서버는 자신의 공개 키를 클라이언트에 전송합니다. 클라이언트는 서버의 공개 키를 사용하여 서버의 신원을 확인하며 이 과정에서 디지털 인증서가 사용됩니다. 클라이언트는 서버의 공개 키를 사용하여 임시 대칭 키(세션 키)를 암호화하여 서버에게 보내고 서버는 자신의 개인 키로 이를 복호화하여 대칭 키(세션 키)를 획득합니다.

서버와 클라이언트 모두 동일한 대칭 키(세션 키)를 가지고 대칭 암호화를 사용하여 데이터를 암호화하여 전송하며 여기서 대칭 암호화는 위에서 수행한 비대칭 암호화에 비해 훨씬 빠르고 효율적이기 때문에 보안성과 성능의 균형을 맞추게 됩니다.


참고 자료

  • 그림으로 배우는 Http & Network Basic