반응형
HTTP vs HTTPS
HTTPS 도입
HTTP는 텍스트 교환이므로, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈가 존재합니다.
이런 보안(Security) 문제를 해결해주는 프로토콜이 'HTTPS'입니다.
HTTPS 동작순서
- HTTP : TCP -> HTTP
HTTPS : TCP -> SSL/TLS -> HTTP - HTTPS 는 HTTP 통신하는 소켓 부분을 SSL(Secure Socket Layer) or TLS(Transport Layer Security)라는 프로토콜로 대체하는 것 뿐입니다.
- HTTPS 의 SSL 에서는 공통키 암호화 방식과 공개키 암호화 방식을 혼합한 *하이브리드 암호 시스템을 사용합니다.
- *하이브리드 암호: 공통키를 공개키 암호화 방식으로 교환한 다음에 이후의 통신은 공통키 암호를 사용하는 방식이다.
- HTTPS 의 SSL 에서는 공통키 암호화 방식과 공개키 암호화 방식을 혼합한 *하이브리드 암호 시스템을 사용합니다.
- 모든 사이트가 HTTPS로 하지 않는 이유는, 암호화 과정으로 인한 속도 저하가 발생하기 때문이다.
HTTPS 통신 흐름 (하이브리드 암호 방식)
- 애플리케이션 서버(A)를 만드는 기업은 HTTPS를 적용하기 위해 공개키와 개인키를 만듭니다.
- 신뢰할 수 있는 *CA 기업을 선택하고, 그 기업에게 내 공개키 관리를 부탁하며 계약을 합니다.
- *CA : Certificate Authority, 공개키를 저장해주는 신뢰성이 검증된 민간기업
- 계약 완료된 CA 기업은 해당 기업의 이름, A서버 공개키, 공개키 암호화 방법을 담은 인증서를 만들고, 해당 인증서를 CA 기업의 개인키로 암호화해서 A서버에게 제공합니다.
- 이제 A서버는 A서버의 공개키로 암호화된 HTTPS 요청이 아닌 요청이 오면, 이 암호화된 인증서를 클라이언트에게 건내줍니다.
- 클라이언트는 main.html 파일을 달라고 A서버에 요청했다고 가정하면, HTTPS 요청이 아니기 때문에 CA기업이 A서버의 정보를 CA 기업의 개인키로 암호화한 인증서를 받게 됩니다.
- CA 기업의 공개키는 브라우저가 이미 알고있기에, 브라우저는 해독한 뒤 A서버의 공개키를 얻게 됩니다(세계적으로 신뢰할 수 있는 기업으로 등록되어 있기 때문에, 브라우저가 인증서를 탐색하여 해독이 가능한 것).
- 이제 A서버와 통신할 때는 얻은 A서버의 공개키로 암호화해서 요청을 날리게 됩니다.
- 물론, HTTPS도 무조건 안전한 것은 아니며, (신뢰받는 CA 기업이 아닌 자체 인증서 발급한 경우 등)
- 이때 HTTPS지만 브라우저에서 주의 요함, 안전하지 않은 사이트와 같은 알림으로 주의 받게 됩니다.
GET vs POST
공통점
- *HTTP 패킷을 이용하여 클라이언트가 서버로 데이터 요청을 하는 메서드입니다.
- HTTP 패킷: HTTP를 통해 인터넷을 통해 보내는 데이터를 가리키며, 헤더와 바디로 구성됩니다.
- HTTP 패킷 헤더: 7가지 HTTP 메서드 방식 중 무엇을 썻는지, 클라이언트의 정보, 브라우저 정보,접속할 URL 등등 과 같은 클라이언트 정보가 들어가 있습니다.
- HTTP 패킷 바디: 보통 비어있다. 하지만, 특정 데이터를 담아서 서버에게 요청을 보낼 수 있습니다.
- HTTP 패킷: HTTP를 통해 인터넷을 통해 보내는 데이터를 가리키며, 헤더와 바디로 구성됩니다.
GET
- URL을 통해 모든 전송 데이터(파라미터)를 전달하기에 전달되는 값이 URL에 노출됩니다.
- GET방식은 URL에 데이터를 붙여서 보내므로, HTTP패킷의 해더에 포함되여 서버에 요청합니다.
- 따라서, GET 방식에서 BODY에 특별한 내용을 넣을 것이 없으므로 BODY가 빈상태로 보내집니다.
- 그러므로, 헤더의 내용중 BODY 데이터를 설명하는 Content-Type이라는 헤더필드는 들어가지 않습니다.
- URL형태로 표현되므로, 특정 페이지를 다른사람 에게 접속하게 할 수 있습니다.
- URL 길이에 제한 때문에 전송할 수 있는 데이터의 양이 제한된다.
- 전송 데이터의 형식을 맞추기 위해 인코딩이 필요할 수 있다.
POST
- HTTP BODY에 전송 데이터를 담아서 전달하기에 전송 데이터가 노출되지 않는다.
- POST방식은 URL에 데이터를 붙여서 보내지 않고 BODY에다가 데이터를 넣어서 보냅니다.
- 따라서, 헤더필드 중 BODY 데이터를 설명하는 Content-Type이라는 헤더 필드가 들어가고 어떤 데이터 타입인지 명시합니다.
- 전송 데이터의 길이 제한이 없습니다.
참고
- [CS] HTTP vs HTTPS / GET vs POST: https://jjanddakdevlogg.tistory.com/entry/HTTP-vs-HTTPS-GET-vs-POST
- GET방식 과 POST방식: https://mommoo.tistory.com/60
반응형
'Study: ComputerScience(CS) > CS: Network' 카테고리의 다른 글
[Network] Socket 소켓 프로그래밍 (feat. sockaddr_in, IPv4...) (2) | 2022.12.16 |
---|---|
[Network] Message Queue(메시지큐) 정리 (0) | 2022.11.26 |
[Network] 네트워크 기본 개념 정리 (IP, Route, Subnet...) (1) | 2022.10.08 |
[Network] Blocking vs Non-Blocking & Sync vs Async 비교 정리 (0) | 2022.09.25 |
[Network] RESTful API 의미와 설계 규칙 (0) | 2022.07.07 |