HTTPS

jiholee·2022년 2월 6일
1

cs

목록 보기
4/7

HTTP(Hypertext Transfer Protocol)

웹에서는 브라우저와 서버 간에 데이터를 주고받기 위한 방식으로 HTTP 프로토콜을 사용한다.

HTTP 프로토콜 특징

  • HTTP 프로토콜은 상태가 없는(stateless) 프로토콜이다. → 이전 데이터 요청과 다음 데이터 요청이 서로 관련이 없다.
  • HTTP 프로토콜은 일반적으로 TCP/IP 통신 위에서 동작한다. (기본 포트 80번)
  • URL : 서버에 자원을 요청하기 위해 입력하는 주소

HTTP 요청 메서드

  • GET : 존재하는 자원에 대한 요청/ 쿼리를 통해 데이터 전달(암호화x)
  • POST : 새로운 자원 생성/ request body로 데이터 전달(암호화 o)
  • PUT : 존재하는 자원에 대한 변경
  • DELETE : 존재하는 자원에 대한 삭제
  • HEAD : 서버 헤더 정보를 획득. GET과 비슷하나 Response Body를 반환하지 않음

HTTP status code

응답 상태 코드를 통해 성공/실패 여부와 정보를 얻을 수 있다.

  • 10x : 정보 확인
  • 20x : 통신 성공
  • 30x : 리다이렉트
  • 40x : 클라이언트 오류
  • 50x : 서버 오류

HTTPS: HyperText Transfer Protocol Secure

HTTP over TLS, HTTP over SSL로 불린다. SSL이나 TLS 프로토콜을 통해 데이터를 암호화 한다. (TLS == SSL)

인증서 발급 과정

  1. (서버) 서버의 공개키와 비밀키를 생성한다.
  2. (서버 → CA) 인증서를 발급받기 위해 서버는 CA에 자신의 공개키와 각종 정보를 전달한다.
  3. (CA) 서버로부터 전달받은 정보로 SSL인증서를 발급한다.
  4. (CA) 인증서를 암호화 하기위해 CA의 공개키와 비밀키를 생성한다. CA는 비밀키를 이용해 SSL 인증서를 암호화 한다.
  5. (CA→서버) 암호화한 인증서를 서버에 전달한다.

SSL Handshake

  1. (client → 서버) 연결을 시도한다.
  2. (서버 → client) 서버가 자신의 인증서와 공개키를 전달한다.
  3. client에서 CA의 공개키로 복호화하여 인증서를 검증한다. (클라이언트는 인증기관의 리스트와 공개키를 가지고 있다.)
  4. (client → 서버) 세션키를 생성해서 서버의 공개키로 암호화 해서 전달한다. (이것을 복호화 하는 방법은 서버의 개인키로만 가능하다.)
  5. 서버가 자신의 개인키로 복호화해서 세션키를 얻는다.

서버와 클라이언트가 동일한 대칭키를 교환하였고 통신할 준비가 완료된다.


  • 대칭키: 암호화/복호화에서 동일한 키와 동일한 알고리즘이 사용된다. 수신자와 송신자가 키를 교환해야 한다. 비대칭키 방식에 비해 빠르다.

  • 공개키: 암호화 하는 키와 복호화 하는 키가 다른 방식을 의미한다. 개인키(비밀키)와 공개키로 구성이 되는데, 만약 개인키로 암호화 했다면 공개키로 복호화하고, 공개키로 암호화 했다면 개인키로 복호화 하는 방식이다. 키 교환이 필요 없고 공개키만 공개하면 된다.

  • 세션키 : 하나의 통신 세션에서 메시지를 암호화 하는 1회용 대칭키이다. 사용이 종료되면 폐기된다.


중간자 공격을 막기위해 공개 키 기반구조를 사용할 수 있다.

0개의 댓글