목차
- HTTP
- HTTPS
- Method
- 상태코드
HTTP (HyperText Transfer Protocol)
HTTP (HyperText Transfer Protocol)
- HTTP는 클라이언트(웹 브라우저)와 서버 간의 통신을 위한 프로토콜.
- 데이터는 평문으로 전송되어, 누구나 패킷을 가로채어 내용을 확인 가능.
이로 인해 개인정보와 같은 민감한 데이터는 노출 가능성 있음.
- 데이터 무결성도 보장되지 않음.
- 80번 포트를 사용
- TCP/IP 위에서 작동.
- Stateless 프로토콜이며 Method, Path, Version, Headers, Body 등으로 구성된다.
HTTPS
- HTTPS는 HTTP의 보안 버전으로,
SSL(보안 소켓 레이어) 또는 TLS(전송 계층 보안) 프로토콜을
사용하여 보안성을 강화한다.
- 사실 SSL의 발전된 버전이 TLS이다. SSL은 보안 취약점이 많아 사용하지 않는다.
- 데이터의 무결성을 보장.
- 보안 인증서를 통해 웹 사이트의 신뢰성을 확인하고, 중간자 공격과 같은 공격을 방지.
- 민감한 정보를 전송하는 온라인 결제, 로그인 등의 경우에 사용.
- 443번 포트를 사용
대칭키 및 비대칭
- 대칭키 암호화
- 클라이언트와 서버가 동일한 키를 사용해 암호화/복호화를 진행함
- 키가 노출되면 매우 위험하지만 연산 속도가 빠름
- 비대칭키 암호화
- 1개의 쌍으로 구성된 공개키와 개인키를 암호화/복호화 하는데 사용함
- 키가 노출되어도 비교적 안전하지만 연산 속도가 느림
비대칭키 암호화는 공개키/개인키 암호화 방식을 이용.
- 공개키 : 모두에게 공개가능한 키
- 개인키 : 나만 가지고 알고 있어야 하는 키
효과
- 공개키 암호화 : 공개키로 암호화를 하면 개인키로만 복호화할 수 있다.
-> 개인키는 나만 가지고 있으므로, 나만 볼 수 있다.
- 개인키 암호화 : 개인키로 암호화하면 공개키로만 복호화할 수 있다.
-> 공개키는 모두에게 공개되어 있으므로, 내가 인증한 정보임을 알려 신뢰성을 보장할 수 있다.
SSL (Secure Sockets Layer)
SSL은 여러 보안 취약점을 가지고 있어, 안전성이 상대적으로 낮다.
2015년 공식적으로 사용 종료.
TLS (Transport Layer Security)
SSL의 발전된 버전으로 현재 TLS 1.2 or TLS 1.3의 버전을 사용하고 있다.
최신 TLS 버전은 Forward Secrecy를 지원하여, 장기 동안 저장된 트래픽을 해독할 수 없게 한다.
작동 원리
-
핸드셰이크 프로세스 (Handshake Process)
- 클라이언트 -> 서버
- ClientHello: 클라이언트가 서버에게 연결을 시작하려는 의도를 알리는 메시지를
보낸다. 이 메시지에는 클라이언트가 지원하는 암호화 알고리즘 및 기타 설정 정보를 포함한다.
- 서버 -> 클라이언트
- ServerHello: 서버는 클라이언트가 전송한 정보 중에서 선택된 암호화 알고리즘과 서버의 인증서(공개키 포함)를 포함한 정보를 클라이언트에게 보낸다.
- ServerKeyExchange (Optional): 서버가 Diffie-Hellman 키 교환을 사용하는 경우, 서버의 임시 공개키 정보를 전송한다.
- CertificateRequest (Optional): 서버가 클라이언트로부터 클라이언트 인증서를 요청할 경우 이를 알리는 메시지를 전송한다.
- ServerHelloDone: 서버가 핸드셰이크 단계를 마쳤음을 클라이언트에게 알린다.
- 클라이언트 -> 서버
- ClientKeyExchange: 클라이언트가 서버의 공개키로 생성한 Pre-Master Secret을 서버에게 보낸다. 이 Pre-Master Secret은 이후에 대칭키를 생성하기 위한
중요한 정보다.
- CertificateVerify (Optional): 클라이언트가 서버로부터 받은 서버 인증서를 검증하여 클라이언트의 신원을 증명할 경우 이를 알리는 메시지를 전송한다.
- Finished: 클라이언트와 서버는 이제 핸드셰이크가 완료되었음을 서로에게 알리는 Finished 메시지를 교환한다.
-
데이터 전송
핸드셰이크가 성공적으로 완료 후, 클라이언트와 서버 간의 데이터 통신이다.
- 데이터 암호화: 클라이언트와 서버는 핸드셰이크 프로세스에서 생성된 대칭키를 사용하여 데이터를 암호화한다.
- 데이터 전송: 암호화된 데이터는 네트워크를 통해 안전하게 전송된다.
- 데이터 해독: 상대방이 데이터를 수신하면, 받은 데이터를 대칭키를 사용하여 해독하여 원본 데이터로 복원한다.
HTTP Method
HTTP 메서드는 클라이언트가 서버에게 요청의 목적과 의도를 알리는 역할을 한다.
주요 메서드
- GET - 서버로부터 리소스를 요청하여 데이터 조회에 사용되며 데이터 전달은
쿼리를 통해서 전달한다. POST도 가능하나 GET이 캐싱이 되어 유리하다.
- POST - 서버로 데이터를 HTTP 본문(body)에 포함하여 리소스를 전송한다.
주로 새로운 리소스를 생성하거나 데이터를 전달하기 위해 사용한다.
- PUT - 서버로 데이터를 HTTP 본문(body)에 포함하여 리소스를 전송한다. 단, POST와 다르게 리소스를 수정하거나 수정할 리소스가 없으면 새로 생성한다.
- PATCH - 서버로 데이터를 HTTP 본문(body)에 포함하여 리소스를 전송한다.
PUT 메서드와 유사한 기능을 하지만 PUT 메서드가 리소스 전체를 덮어씌운다면,
PATCH 메서드는 일부 수정을 할 때 사용된다.
- DELETE - 리소스를 삭제할 때 사용한다.
기타 메서드
- HEAD - GET 메서드와 유사한 기능을 하지만 실제 리소스를 반환하지 않고
응답 헤더만 반환한다.
- OPTIONS - 클라이언트가 실제 요청을 보내기 전에 먼저 OPTIONS 요청을 보내어 서버에서 요청을 처리할 수 있는지 확인하고, 허용되는 메서드, 헤더 등에 대한 응답을 받을 때
사용된다.
- CONNECT - 웹 브라우저나 클라이언트 애플리케이션이 프록시 서버를 통해 대상 서버로의 안전한 연결을 설정하는 데 사용된다.
- TRACE - 웹 서버에게 클라이언트가 보낸 요청 메시지를 그대로 반환해주는 기능을 가지고 있다. TRACE 메서드를 사용하면 클라이언트는 서버로 전송한 요청 메시지가 서버에 도달한 후 어떻게 변경되었는지를 확인할 수 있다. 일반적으로 디버깅 목적으로 사용되며, 보안상의 이유로 대부분 서버에서 비활성화되어 있다.
메서드속성
| HTTP 메서드 | 안전 | 멱등 (Idempotent) | 캐시 가능 |
|---|
| GET | 예 | 예 | 예 |
| HEAD | 예 | 예 | 예 |
| POST | 아니오 | 아니오 | 예 |
| PUT | 아니오 | 예 | 아니오 |
| DELETE | 아니오 | 예 | 아니오 |
| CONNECT | 아니오 | 아니오 | 아니오 |
| OPTIONS | 예 | 예 | 아니오 |
| TRACE | 예 | 예 | 아니오 |
| PATCH | 아니오 | 아니오 | 예 |
상태 코드
- 클라이언트에게 요청이 성공적으로 처리되었는지 또는 어떤 문제가 발생했는지를 알려주는
서버가 클라이언트에게 보내는 3자리 숫자로 이루어진 코드로 각 숫자의 범위에는 특정한
의미가 있다.
코드의 범위 별 의미
- 1xx (Informational) - 요청이 수신되었고 처리 중.
- 2xx (Success) - 요청이 성공적으로 처리됨.
- 3xx (Redirection) - 클라이언트가 추가 조치를 취해야 함.
- 클라이언트에게 요청을 재전송하거나 새로운 위치로 이동 등.
- 4xx (Client Error) - 클라이언트 측에서 발생한 오류.
- 5xx (Server Error) - 서버 측에서 발생한 오류.
일반적으로 사용되는 코드
- 200 OK - 요청이 성공적으로 처리됨. 주로 GET 또는 POST 요청에 대한 성공 응답으로 사용.
- 201 Created - 요청이 성공적으로 처리되어 새로운 리소스가 생성됨. 주로 POST 요청 후에 사용.
- 400 Bad Request - 클라이언트 요청이 잘못되었거나 서버가 이해할 수 없는 요청을
받을 경우. 잘못된 요청이나 유효하지 않은 매개변수 등을 포함하는 경우에 사용.
- 404 Not Found - 요청한 리소스가 서버에서 찾을 수 없음. 주로 잘못된 URL이나 삭제된
리소스를 요청한 경우에 사용.
- 500 Internal Server Error - 서버에서 요청을 처리하는 동안 내부 오류가 발생. 서버에서
처리할 수 없는 예상치 못한 오류가 발생한 경우에 사용.