HTTP와 HTTPS

이원석·2022년 3월 30일
0

Network

목록 보기
3/7

1.HTTP 프로토콜


HyperText Transfer Protocol의 약자로, 웹 상에서 클라이언트와 서버간에 요청과 응답으로 정보를 주고 받을 수 있는 프로토콜입니다.


[HTTP의 특징]

  • 주로 HTML 문서를 주고받는 데에 쓰인다.

  • TCP, UDP를 사용하며 80번 포트를 사용한다.

  • 비연결셩(Connectionless)
    클라이언트와 서버가 요청과 응답을 교환하면 연결이 끊어진다.

  • 무상태성(Stateless)
    연결을 끊는 순간 클라이언트와 서버의 통신은 끝나게되며 상태정보를 유지하지 않는다. ByeBye

[HTTP 동작 과정]

  1. 사용자가 웹 브라우저에 URL 주소를 입력한다.
  2. DNS(Domain Name System) 서버에 웹 서버의 호스트 이름을 IP네트워크 주소로 변경 요청한다.
  3. 웹 서버와 TCP 연결을 시도한다. (3way-handshaking)

  4. 클라이언트가 서버에게 요청을 보낸다.
    4-1 HTTP Request Message = [Request Header] + 빈 줄 + [Request Body]
    - Requeset Header = 요청 메소드 + 요청 URI + HTTP 프로토콜 버전
    ex) GET + /background.png + HTTP/1.0
    - 빈 줄 = 요청에 대한 모든 메타 정보가 전송되었음을 알리는 용도
    - Request Body = GET, HEAD, DELETE, OPTIONS 처럼 리소스를 가져오는 요청은 바디 미포함

  5. 서버가 클라이언트에게 데이터 응답한다.
    5-1 HTTP Response Message = [Response Header] + 빈 줄 + [Response Body]
    - Requset Header = HTTP 프로토콜 버전 + 응답코드 + 응답 메시지
    ex) HTTP/1.0 + 404 + Not Found.
    - 빈 줄 = 요청에 대한 모든 메타 정보가 전송되었음을 알리는 용도
    - Response Body = 응답 리소스 데이터

  6. 서버 클라이언트 간 연결 종료. (4way-handshaking)
  7. 웹 브라우저가 웹 문서 출력





2.HTTPS 프로토콜


HyperText Transfer Protocol over Secure Socket Layer (HTTP over TLS, HTTP over SSL, HTTP Secure)의 약자로 웹 통신 프로토콜인 HTTP의 보안이 강화된 버전의 프로토콜 입니다.


[HTTPS의 특징]

  • HTTPS의 기본 TCP/IP 포트로 443번 포트를 사용한다.

  • HTTPS는 소켓 통신에서 일반 텍스트를 이용하는 대신, 웹 상에서 정보를 암호화하는 SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화한다. 두 프로토콜의 주요 목표는 기밀성, 데이터 무결성, ID및 디지털 인증서를 사용한 인증을 제공하는 것이다.

  • 금융 정보나 메일같은 중요한 정보를 주고받는 것은 HTTPS를, 중요하지 않은 페이지는 HTTP를 사용한다.

SSL/TLS의 개념

전송 계층 보안(Transport Layer Security, 이하 TLS) 는 암호 규약이다. TLS는 보안소켓 계층(Secure Sockets Layer, 이하 SSL) 이 표준화를 통해 바뀐 이름이다.
이 규약은 인터넷 같이 TCP/IP 네트워크를 사용하는 통신에 적용되며, 통신 과정에서 전송계층 종단간 보안과 데이터 무결성을 확보해준다.


SSL/TLS의 작동방식

TLS는 Hadnshake protocol과 Record protocol 두가지 동작 파트로 나누어져 있다.

  1. Handshake Protocol은 클라이언트와 서버간의 인증을 수행하며, 패킷 암호화에 필용한 버전 및 정보를 협의한다. 최종적으로 동일한 암호키를 주고 받는 것으로 동작을 완료한다.

  2. Record protocol은 Handshake 과정에서 공유된 정보를 이용하여 암호화를 수행한다. 한번에 전송이 어려운 데이터를 여러 개로 나누어 암복호화를 수행하는 파트이다.



[HTTPS의 작동 원리]

암호화를 시킬 수 있는 공개키, 복호화를 시킬 수 있는 개인키를 이용한 암호화 방법을 사용한다.
- 공개키: 모두에게 공개하며 공개키 저장소에 등록한다.
- 개인키(비공개키): 개인에게만 공개되며, 클라이언트/서버 구조에서는 서버가 가지고있다.

공개키(비대칭키) 암호화 방식과 대칭키 암호화 방식의 장점을 활용해 하이브리드 형식으로 사용한다.
데이터를 공개키 방식으로 암복호화 하는 방법은 대칭키보다 안전하지만 시간이 오래걸린다는 단점이 있다.
따라서 대칭키 방식을 사용하여 데이터를 빠르게 암복호화 하되, 대칭키를 전달하는 방법은 안전한 방법인 공개키를 활용한다.

  1. Client Hello
    클라이언트가 서버에게 전송하는 데이터
    - 암호화 알고리즘, TLS 버전과 pre-master-key를 생성하기 위한 난수를 생성하여 전송한다.

  2. Server Hello
    clinet Hello에 대한 응답으로 전송하는 데이터
    - 사용할 암호화 알고리즘, TSL 버전과 pre-master-key를 생성하기 위한 난수를 생성하여 전송한다.

  3. Certificate
    클라이언트가 서버로부터 받은 인증서가 CA(Certificate Authority)에 의해 발급되었는지 확인한다.

  4. Client Key Certificate
    클라이언트에서 pre-master-key를 생성하여 전송한다. 이 키는 1,2 단계에서 생성된 난수를 조합하여 생성하게 되며 이는 대칭키 암호화에 사용한다. 이 때, 안전한 키 전송을 위해 공개키 방식을 사용하여 전송한다.
    ex) 클라이언트 -(pmk)-> 서버

  5. Server Key Certificate
    서버는 개인키로 pre-master-key를 복호화 하여 클라이언트와 대칭키를 공유하게 된다.

위의 일련의 과정들을 통해 공개키 방식으로 대칭키를 전달 후 설정하여 session key(대칭키)를 생성하고 이를 활용하여 데이터를 암복호화 하여 데이터를 송수신한다.




[참고문헌]
https://github.com/WeareSoft/tech-interview/blob/master/contents/network.md
https://mysterico.tistory.com/30
https://steemit.com/cybersecurity/@bonbon42/tls-v1-3-1-https-tls

0개의 댓글