본문 바로가기
Computer Science/네트워크

[네트워크] HTTP와 HTTPS의 차이

by Sky Titan 2020. 10. 20.
728x90

HTTP (HyperText Transfer Protocol)

  • 서버와 클라이언트 간 데이터를 송수신하기 위한 가장 기본적인 프로토콜
  • 전송되는 데이터(하이퍼텍스트 문서)가 암호화 되지 않음 -> '스니핑'과 같은 공격에 취약

HTTPS

  • HTTP에 SSL (Secure Socket Layer, 보안 소켓 계층)을 추가하여 데이터를 암호화해서 전송 -> 중간에 크래킹을 당해 데이터를 훔쳐도 볼 수 없음
  • 실제 데이터는 대칭키 암호화 방식을 사용하여 주고 받게 되고 대칭키를 넘길 때만 공개키 암호화 방식을 사용함 (이유 : 속도)
  • HTTP보다 암호화 과정에 드는 시간이 들기 때문에 속도가 느려서 모든 웹 페이지가 HTTPS를 사용하진 않는다. 

SSL, TLS

  • 클라이언트와 서버간의 통신을 공인된 제 3자가 보증해주는 문서(인증서)

공개키 암호화 방식

  • 클라이언트는 공개키, 서버는 개인키를 가지고 데이터 암복호화 작업을 진행
  • 공개키로 암호화 -> 개인키로 복호화 가능
  • 개인키로 암호화 -> 공개키로 복호화 가능
  • 서버는 자신의 공개키를 공개키 저장소 역할을 하는 CA(Certificate Authority) 기업에 보낸다
  • 클라이언트는 공개키를 CA기업에서 얻을 수 있다.
  • CA 기업은 반드시 신뢰할 수 있는 유명한 기업으로 선택해야 비교적 안전하다!!

 

 

TLS, SSL 핸드쉐이크

1. Client hello (Client → Server)

  • Client에서 지원하는 SSL 버전, 사용 가능한 암호화 방법 (cipher) 리스트, 클라이언트에서 생성한 난수 전달

 

2. Server hello (Server → Client)

  • Server에서 지원하는 SSL 버전, 선택한 암호화 리스트, 서버에서 생성한 난수 전달

 

3. Certificate (Server → Client)

  • 서버에서는 클라이언트 측으로 서버의 개인키로 암호화한 SSL 인증서를 보낸다. 인증서 안에는 공개키가 포함되어있다.
  • 클라이언트 측에선 받은 인증서가 진짜인지 확인하기 위해 CA에서 공개키를 받아서 복호화를 한다. (복호화가 된다면 올바른 인증서)

 

4. Client Key Exchange

  • SSL 인증서 내부의 공개키로 데이터 암호화에 사용할 목적으로 생성한 대칭키를 암호화하여 서버에게 전송

 

5. ChangeChipherSpec / Finished

  • 서로에게 패킷을 보내 데이터를 교환할 준비가 되었음을 알림
  • 'Finished' 패킷을 보내어 SSL 핸드쉐이크를 종료한다. 

 

728x90

댓글