HTTPS

김기한·2022년 1월 8일
0

Web

목록 보기
1/2
post-thumbnail

HTTP

Hypertext Transfer Protocol로, 인터넷에서 데이터를 주고 받기 위한 규약. 개발 시 정해진 HTTP 규약을 통해 통신할 수 있다.

HTTPS

HTTP over Secure Socket Layer로, SSL 위에서 동작하는 HTTP라는 의미. HTTP는 데이터를 주고 받을 때 평문을 주고 받기 때문에 도청 공격에 매우 취약하고, 올바른 사용자로 위장하여 서버의 리소스를 탈취할 수 있음. 그렇기 때문에 통신 시 Application Layer와 Transport Layer 사이에 존재하는 SSL을 통해 암호화하여 HTTP 통신하는 HTTPS가 나오게 됨.

SSL 통신 과정

  1. client hello (client → server) 🙆‍♂️

    • 무작위 데이터, 가능한 암호화 방식의 리스트 전달
  2. server hello (server → client) 🙆‍♂️

    • 무작위 데이터, 클라이언트의 가능한 암호화 방식 중 하나를 선택하여 해당 암호화 방식을 전달.
    • 인증서 전달
  3. CA check

    • 인증서를 전달 받은 클라이언트는 브라우저에 존재하는 CA리스트 중 서버의 CA가 존재하는 지 검사.
    • 존재하지 않다면, 경고 메시지 전달.
    • 존재한다면, 브라우저에 저장된 해당 CA의 공개키를 이용하여 인증서 복호화.
    • 복호화에 성공했다면, CA가 맞는 것 이므로 신뢰할 수 있음.
  4. key change 🔑

    • 클라이언트는 서버의 무작위 데이터와 클라이언트의 무작위 데이터를 조합하여 데이터를 교환하기 위한 pre master secret을 생성.
    • pre master secret을 CA의 공개키로 암호화 하여 서버로 전달.

SSL 보안

HTTPS를 통해 데이터를 주고 받고 세션을 해제하는 데 걸리는 시간은 매우 짧으므로, 대칭키를 탈취당했다고 해도 매우 짧은 시간이기 때문에 대칭키를 바로 폐기할 수 있음.

왜 공개키로 암호화 하지 않고 대칭키를 따로 만들까?

공개키로 암호화하는 작업은 비용이 많이 들어감. 대칭키를 통해 데이터를 암호화하고, 공개키를 통해 대칭키를 교환하는 방식이 더 효율적.

profile
vgihan's velog

0개의 댓글