본문 바로가기
cs공부/네트워크프로그래밍

네트워크프로그래밍 - HTTP와 HTTPS

by 코딩하는 돼징 2024. 3. 11.
반응형

HTTP(Hyper Text Transfer Protocol 또는 HyperTexT Protocol)

WWW(World Wide Web)의 토대이며 하이퍼텍스트 링크를 사용하여 웹페이지를 로드하는데 사용된다. 이는 클라이언트/서버 모델을 따라 데이터를 주고 받기 위한 프로토콜이다. 사용자가 웹 사이트를 방문하면 사용자 브라우저가 웹 서버에 HTTP 요청을 전송하고 웹 서버는 요청에대한 HTTP 응답으로 반환한다. 

 

프로토콜이란?

네트워크나 통신 시스템에서 데이터를 주고 받는데 사용되는 규약이나 규칙의 집합이다. 그러므로 특정한 형식과 구조를 가지며 통신하는 장치들 간에 상호작용하는 방법을 정의한다.  프로토콜은 일반적으로 계층 구조를 가지며 대표적으로 TCP/IP 프로토콜이 있다. 이는 인터넷에서 데이터를 전송하기 위한 표준 프로토콜이다.


HTTP의 구조

HTTP는 요청(Request)와 응답(Response)로 구성되어있다. 클라이언트가 요청을하면 서버가 응답을 하는 구조이다. 그러므로 클라이언트가 서버에 정보를 요청하면 응답 코드와 내용을 전송하고 클라이언트와 연결을 종료한다.

01 HTTP Request

https://medium.com/@adilrk/http-request-and-response-e7da8eb3a00c

Method : HTTP 요청의 종류를 나타낸다. 

- GET은 리소스를 요청하기위한 메서드(서버로부터 데이터를 가져옴)

- POST은 서버에 데이터를 제출하기 위한 메서드(데이터를 서버로 전송)

Path : 클라이언트가 요청하는 리소스의 경로를 나타낸다. 예를 들어  "/index.html"과 같이 요청된 리소스의 경로를 지정한다.

Protocol : HTTP 요청이 사용하는 프로토콜을 나타낸다. HTTP/1.1 이나 HTTP/2와 같이 버전을 표기한다.

https://medium.com/@shlee1353/http1-1-vs-http2-0-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EA%B0%84%EB%8B%A8%ED%9E%88-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0-5727b7499b78

- HTTP/1.1 : 순차적인 프로콜이므로 연결당 한 번에 하나의 요청과 응답을 처리한다.

- HTTP/2 : Multiplexed Streams이다. 그러므로 단일 연결을 사용하여 여러 요청을 동시에 수행할 수 있다. handshake를 제공하므로 손실이 많고 느린 연결 대기 시간문제를 해결할 수 있다.

Headers: 요청에 대한 추가 정보를 포함한다. 예를 들어 호스트의 이름이나 클라이언트의 사용자 에이전트 정보를 나타낸다.

예시

GET /index.html HTTP/1.1  -  헤더
Host: www.example.com  -  호스트

02 HTTP Response

https://medium.com/@adilrk/http-request-and-response-e7da8eb3a00c

Protocol : 사용된 프로토콜의 버전 

Status Code(상태 코드) : 요청의 성공이나 실패를 나타난다.

200 : OK // 요청이 성공적으로 처리
400 : Bad request // 잘못된 요청
404 : Not Found // 요청한 페이지를 찾을 수 없음
500 : Internal Server Error // 서버 내부 오류 발생

Headers : 응답에 대한 추가 정보이다.

- Content-Type : 응답 본문의 유형(ex) text/html,image/jpg) 

- Content-Length : 응답 본문의 길이를 바이트 단위로 나타낸다.

Body : 실제로 사용자에게 표시되는 내용

예시

HTTP/1.1 200 OK
<헤더>
<HTML>
    <HEAD>
        <TITLE>Code!</TITLE>
    </HEAD>

    <BODY>
        <p>Piggy!</p>
    </BODY>
</HTML>

 

문제 발생!

HTTP메시지는 일반 텍스트이므로 제3자가 인터넷을 통해 쉽게 액세스하고 읽을 수 있다. 그러므로 이를 해결하기 위해 HTTPS가 등장하게 되었다.

 

스니핑(Packet Sniffing) - 네트워크에서 데이터 패킷(통신할 데이터의 구조)은 일반적으로 공개적으로 전송되므로 이러한 패킷을 캡쳐하고 분석할 수 있다. 이를 통해 HTTP요청 및 응답의 내용을 읽을 수 있게 된다.


HTTPS(Hyper Text Transfer Protocol Secure)

HTTP의 데이터가 암호화된 버전이다. TLS(Transport Layer Security) 또는 Secure Sockets Layer(SSL) 보안 프로토콜 을 사용해 암호화된다. 인증, 암호화, 무결성 지원 프로토콜의 기능을 가진다.

 

TLS와 SSL

아래 그림과 같이 독자적으로 존재하는 프로토콜이다. 외부로 데이터를 보낼 때는 TLS에게 보내면 TLS이 데이터를 암호화하여 TCP에게 전달한다. 역으로 데이터를 받을때는 TCP가 TLS에게 데이터를 보내면 TLS이 데이털르 복화하여 HTTP에게 전달한다. 현재는 SSL보다는 TLS만 사용한다.

https://velog.io/@dasssseul/CS-HTTP%EC%99%80-HTTPS%EC%9D%98-%EC%B0%A8%EC%9D%B4

 

SSL/TLS 암호화 방식 종류

01 대칭키 암호화(Symmetric-key encryption)

암호화와 복호화에 사용되는 키가 같은 암호

https://www.catchsecu.com/archives/17134

송신자와 수신자가 동일한 키를 소유하고 있기 때문에 두사람 모두 키에 대한 비밀을 유지해야한다. 만약 둘 중한명이라도 키를 노출한다면 그 키로 생성된 암호문은 더 이상 안전을 보장할 수 없다. 따라서 대칭키 암호에서는 키의 비밀 유지가 가장 중요하며 이 키를 비밀키라고도 한다.  암호화와 복호화를 수행하데 소모되는 시간이 매우 짧은 장점이 있다. 


02 비대칭키(공개키)암호화(Public-key encryption)

암호화와 복호화에 사용하는 키가 서로 다른 암호화

https://www.catchsecu.com/archives/17134

공개키 : 송신자가 정보를 암호화하는데 사용한다.

비밀키 : 데이터를 복호화하는데 사용한다. 공개키와 쌍을 이루는 비밀키이다. 공개키로 암호화된 데이터는 해당 개인키로만 복호화할 수 있다.

예시) 쉽게 이해하기 위해서 우체통에 비유해보자. 편지함의 투입구(공개키)를 통해 누구나 편지를 넣을 수 있지만 편지함은 열쇠(비밀키)를 가진 사람만이 열 수 있다. 


정리

 

*세션 지속성 : SSL/TLS 프로토콜을 통해 클라이언트와 서버 간의 안전한 연결을 유지하면서 세션 정보를 전송 및 유지할 수 있다.

* 검색 엔진 최적화 : 동일한 키워드의 사이트가 있다고 할 때 사용자 키워드 검색 시 상위 노출 기준 중 하나가 보안요소이기 때문에 HTTPS 사이트가 우선 검색 된다.

* SSL/TLS 인증서 : HTTPS를 사용하는 경우 SSL/TLS인증서가 필요하다. 사용자가 HTTPS로 암호화된 연결을 요청할 때 웹브러우저는 서버로부터 받은 인증서를 사용하여 해당 웹 사이트의 신뢰성을 검증하고 안전한 통신을 위해 인증서에 기반한 암호화를 설정한다.

 

 

 

 

반응형

댓글