HTTPS
HTTPS는 웹 통신의 보안을 강화하기 위한 프로토콜로, 클라이언트와 서버간의 데이터를 암호화 하여 내부의 정보를 보호한다.
CA 인증서
HTTPS 통신은 CA(인증 기관)가 발급한 인증서로 시작한다. 이 인증서는 웹사이트의 신뢰성을 보장하고, 유니코드 문자 변형과 같은 공격으로부터 보호한다. (ex a위에 점을 붙인 가짜사이트 등)
-
CA에서 인증서 발급: 대부분의 웹사이트는 CA로부터 인증서를 발급받는다. 이 인증서는 사이트의 신뢰성을 입증한다.
-
발급받은 인증서를 웹 서버에 저장한다. 무료로 제공되는 서비스(Let's Encrypt)도 있다.
-
CA는 브라우저에게 공개키를 준다. 공개키는 데이터 암호화와 서버 신뢰성 확인에 사용된다.
-
클라이언트와 서버 간의 통신은 데이터를 RSA와 같은 암호화 알고리즘을 사용하여 보호합니다.
RSA
클라이언트와 서버 간의 통신 데이터를 암호화 하여 보호하는 기술.
-
클라이언트와 서버는 데이터 암호화용 키를 공개키로 암호화하여 서로에게 전송한다.
-
브라우저에서 만든 암호화 키를 서버와 클라이언트가 공유한다.
-
데이터를 암호화 키를 통해 읽을 수 있고 키가 없는 외부 공격자는 읽을 수 없다. 그러나 이 암호화용 키 자체를 해킹당할 가능성은 존재한다.
=> 해결책: DH을 통해 키 보호
-
HTTP3, TLS1.3은 DH로 이 암호화용 키를 보호한다. RSA와는 다르게 키를 만들 수 있는 조각들만 보내서 조각을 합쳐서 키를 만든다.
-
DHE: 키를 주기적으로 바꿔서 순간적으로 해킹당하더라도 다음에는 방지한다.
HTTP/2 HTTP/3
HTTP/2와 HTTP/3는 이전 프로토콜보다 효율성과 속도를 개선하기 위한 프로토콜로 요즘에 멀티미디어(이미지, 동영상)의 전송이 증가하면서 통신의 비효율성과 커넥션 제한 문제를 해결하기 위해 개발되었다.
HTTP/2
- 구글에서 개발됨
- 헤더 압축: 헤더 정보를 압축하여 통신 효율을 높인다.
- 다중 스트림: 하나의 커넥션 안에서 여러 개의 스트림을 병렬로 처리할 수 있어, 동시에 여러 요청을 보내고 받을 수 있다.
- 서버 푸시: 클라이언트가 요청하지 않은 데이터도 서버에서 미리 보내놓을 수 있다.
- HTTPS가 필수다.
HTTP/3
- UDP를 기반으로 하는 QUIC 프로토콜과 TLS1.3을 사용하여 개발됨
- TCP의 비효율성을 UDP를 사용해 극복했다.
- 0RTT (Zero Round Trip Time): 보안 위혐은 존재하지만 3-way handshake를 피해 빠른 연결이 가능하다. (일반 적으론 1 Round tripo time 소요)
- UDP와 QUIC을 사용하기 때문에 L4, L5 레이어에서 작동한다.
웹소켓
클라이언트에서 항상 먼저 요청을 보내야 하는 기존 HTTP프로토콜의 문제를 통신을 유지하며 서버에서도 데이터를 보낼 수 있는 웹소켓을 사용해 해결
- 기존 모델은 지속적인 데이터(실시간 데이터)를 다룰 때 클라이언트에서 주기적으로 서버에 요청을 보내는 비용이 발생한다. 이 요청을 처리하는 비용이 모두 서버에 부과되는 문제가 있었다.
- ws는 http와 다른 프로토콜, 같은 포트에 사용이 가능하다.
- 서버에 ws 프로토콜 업그레이드를 요청하면 업그레이드 응답과 함께 연결이 가능하다.
- 개발자 도구 messages 탭에서 데이터를 확인할 수 있다.
- 실시간 데이터, 양방향 데이터에서 고려할 수 있다.
- https처럼 보안을 강화한 wss도 있다.
VPN
- PN: Private Network(사설망)
- VPN: Virtual Private Network(가상 + 사설망)
- 인터넷은 전세계에 연결되어있는 망, 사설망은 독립적으로 임의의 구역끼리만 통신할 수 있는 망
- 직접 사설망을 구축할 수도 있지만 인터넷상에서 사설망과 비슷한 효과를 내는 VPN을 구축할 수 있다.
- VPN 내부에선 감시, 필터링을 할 수 있고 원하지 않으면 외부에 공개되지 않는다.
- 해외 VPN: 위와 같은 사설망 효과를 통해 다른 지역에 있는 것처럼 동작한다.
프록시
[클라이언트 - (포워드 프록시)] -> 인터넷 -> [(리버스 프록시) -> 서버 모델]
포워드 프록시
리버스 프록시
- 불필요한 요청 필터링
- Apache, Nginx 등을 통해 구현 가능, 실제 서버보다 잘하는 기능들을 수행한다
- HTTPS를 적용시켜준다.
- 정적 파일 서빙(html, css, js, image, font)
- 압축 기능 지원
- 구동중인 서버가 여러개일 경우 로드 밸런싱, 오토 스케일링 등의 기능을 수행함
게이트웨이
- 클라이언트(HTTPS) -> 인터넷 -> 게이트(HTTP, ws, ftp) -> 서버
- 기존 목적은 프로토콜을 바꾸는 용도
요즘엔 리버스 프록시가 비슷한 역할(HTTPS요청을 내부에서 HTTP로 변환해서 통신)을 하기 때문에 프록시와 비슷한 뜻으로 사용된다.
- AWS의 API Gateway도 프록시의 역할을 한다.
- HTTP method의 CONNECT는 프록시를 거쳐도 그대로 보내는 요청이다.