ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [네트워크] HTTPS 와 SSL Handshake
    네트워크 2021. 8. 30. 18:48
    728x90

    SSL / TLS (Secure Socket Layer, Transport Layer Security)

    • 클라이언트와 서버간의 암호화 통신을 위한 보안 계층 (응용 계층 - 전송 계층 사이) 이라는 독립적인 프로토콜 계층에 속한다.
    • SSL 과 TLS 는 같은 의미의 단어이며, TLS가 SSL의 후속 버전이지만 SSL이 일반적으로 많이 사용된다.

     

    HTTPS

    • 소켓 통신에서 일반 텍스트를 이용하는 대신에, HTTPS 는 SSL/TLS 위에 HTTP 프로토콜을 얹어 보안된 HTTP 통신을 하는 프로토콜

     

    SSL Handshake

    출처 : https://www.imperva.com/learn/performance/cdn-and-ssl-tls/

    * Packet 참고 : https://aws-hyoh.tistory.com/39

     

    Client Hello

    클라이언트가 Random byte를 생성하여 서버에 전송한다.

    클라이언트가 SSL 통신을 하기 위해 현재 지원 가능한 암호화 방식 (Cipher Suite) 를 서버에게 전달하나.

     

    Server Hello

    서버가 Random byte를 생성하여 서버에 전송한다.

    클라이언트가 보낸 Cipher Suite 중 하나를 선택하여 전달한다.

     

    Certificate (& Server Key Exchange) / ServerHelloDone

    서버가 클라이언트에 인증서를 전달한다.

     

    Client Key Exchange

    클라이언트가 서버의 인증서가 어떤 CA에 의해 발급된 것인지 확인하기 위해 클라이언트에 내장되어 있는 CA 리스트를 확인한다.

    클라이언트에 내장된 CA의 공개키로 복호화하며, 성공했다면 인증서 검증이 완료되며 서버의 공개키를 확보한다.

     

    클라이언트가 자신의 Random byte와 서버의 Random byte를 조합하여 비밀키(대칭키)를 위한 pre master secret을 준비한다.

    이 때 서버의 공개키를 이용해 암호화 한 후 서버에 전달한다.

     

    Change Cipher Spec / Finished

    서버는 클라이언트가 전송한 키를 자신의 비공개키로 복호화한다.

    서버와 클라이언트는 일련의 과정을 거쳐 pre master secret 값으로 session key를 생성한다.

    이를 이용하여 서버와 클라이언트 간 대칭키 방식으로 암호화하여 주고 받는 것이 가능해진다.

     

     

    728x90
Designed by Tistory.