HTTP와 HTTPS의 차이점, 그리고 SSL Handshake에 대해 설명해주세요

     

    키워드

    • HTTP와 HTTPS의 차이점
    • HTTPS를 사용하는 이유
      • 암호화, 인증
    • 어떻게 암호화할까?
      • 대칭키
      • 대칭키의 문제점
      • 공개키
    • 어떻게 인증할까?
      • HTTPS를 인증해주는 기관
      • CA , 브라우저에 내장
      • 클라이언트가 서버를 신뢰하기 위해 하는 일
    • 대칭키와 공개키를 혼용하는 이유
      • 대칭키로 암호화, 공개키로 검증 가능

     


     

    HTTP와 HTTPS의 차이점

    HTTP와 HTTPS는 🔐암호화 과정의 유무로 구분지어집니다. 암호화 과정이 없는 방식이 HTTP, 암호화 계층을 거쳐 패킷을 암호화하는 방식은 HTTPS입니다. HTTPS의 S는 Secure를 의미합니다.

     

    HTTPS를 사용하는 이유

    HTTPS를 사용하는 이유는 크게 2가지가 있습니다.

     

    1.  클라이언트가 서버로 보낸 정보들을 제3자가 볼 수 없도록 🔒암호화를 할 수 있습니다.

    2.  접속하는 사이트가 📜인증을 받은 사이트인지를 판별해줍니다.

     

    어떻게 🔒암호화할까?

    ⚖대칭키

    클라이언트와 서버 양쪽에서 암호를 해독할 수 있는 같은 키를 가지고 있는 방식을 의미합니다. 이 키값을 알지 못하면 암호문을 해독할 수 없고 ( 복호화할 수 없고) 클라이언트의 정보를 암호화하고, 서버는 이를 복호화하는 방식이 대칭키의 방식입니다.

    (== 어떤 키로 암호화를 하면 같은 키로 복호화를 할 수 있습니다)

     

    문제점

    애초에 어떻게 동일한 키를 양쪽이 공유하게 할 수 있을까요? 결국 한 번은 한쪽에서 다른 쪽으로 키를 전송해야하는데, 중간에서 제3자가 이 키를 가로챈다면 암호화의 의미가 없어집니다.

     

    👌공개키

    공개키는 대칭키의 단점을 해결하기 위해 개발된 방식입니다. 예를 들어 A와 B라는 한 쌍의 키를 클라이언트가 서버가 가지고 있고, A키로 암호화를 하면 B키로만 복호화를 할 수 있고, A키끼리는 서로 복호화를 할 수 없습니다. 서버는 이 두 키 중 하나를 개인키로 보관하고, 다른 하나는 공개키로 대중에게 공개합니다. 사용자👌공개키비밀번호를 🔒암호화해서 서버로 보내면 ✋개인키를 가지고 있는 서버가 이를 🔓복호화해서 확인할 수 있게 됩니다.

     

     

    어떻게 📜인증 할까?

    HTTPS를 인증해주는 기관

    해당 사이트가 어떤 사이트에서 인증을 받는지 알기 위해서는 공인된 민간 기업들이 있습니다.

    이것을 CA라고 하며, 우리가 사용하는 브라우저에는 CA들의 목록이 내장되어 있습니다.

     

     

    클라이언트가 서버를 신뢰하기 위해 하는 일

    브라우저는 서버를 신뢰하기 위해 handshake 과정을 거치게 됩니다.

    1. 클라이언트는 랜덤 데이터를 생성해서 서버에 보냅니다.
    2. 서버는 답변으로 서버측에서 생성한 무작위의 데이터 + 📜서버의 인증서를 보냅니다.
    3. 이때 클라이언트는 공개키 시스템을 사용해서 서버가 보낸 인증서를 브라우저에 내장된 CA들의 정보를 통해 확인하게 됩니다.

    CA의 인증을 받은 인증서들은 CA의 개인키로 🔒암호화 되어있습니다.

    서버에게서 받은 인증서가 진짜라면 CA의 공개키로 🔓복호화할 수 있습니다.

    이 공개키로 복호화될 수 있는 인증서를 발급해주는 건 그에 대응하는 개인키를 가진 CA뿐이기 때문입니다.

    성공적으로 복호화된 인증서에는 서버의 공개키가 포함되어 있습니다.

     

    지금부터 주고 받아지는 방식은 ⚖대칭키와 👌공개키 방식이 혼합 되어서 사용됩니다.

     

     

    대칭키와 공개키를 혼용하는 이유는?

    더보기

    공개키 방식으로 메시지를 암호화 및 복호화하는 건 대칭키로 할 때보다 컴퓨터에 많은 부담을 주기 때문입니다.

    (== 사이트를 이용할 때 주고받을 다량의 데이터를 공개키로 일일이 암호화, 복호화하는 건 무리입니다.)

    즉, ⚖대칭키암호화를 하며, 대칭키를 공유할 때 👌공개키를 사용하는 것입니다.

     

    클라이언트는 위의 handshake 에서 생성된 무작위의 데이터를 혼합해서 어떤 임시 키를 만듭니다.

    이 임시 키는 서버의 👌공개키로 🔓암호화돼서 서버로 보내진 다음 클라이언트와 서버 양쪽에서 일련의 과정을 거쳐 동일한 ⚖대칭키로 변환됩니다.

     

     


    참고 영상

     

     

    728x90

    댓글