리버스 프록시를 이용한 https 적용하기 with Nginx

프론트엔드에서 사용하는 정적 웹사이트 호스팅 서비스인 Vercel은 자동으로 https로 요청을 보내게 되어 있다. 서버 도메인이 http로 되어있기 때문에, 이를 https로 보안처리를 할 필요성이 생겼다. 해당 글에서 Nginx를 이용하여 https를 적용하는 과정을 살펴본다.

1. HTTP vs HTTPS

1.1. HTTP

HTTP(HyperText Transfer Protocol)는 클라이언트와 서버 사이에 데이터를 주고받기 위한 프로토콜이다.

HTTP는 80번 포트를 사용하고 있으며, 보통 header와 body로 나누어 데이터를 전달한다.

하지만, HTTP는 별도의 암호화가 되어있지 않은 프로토콜이므로 민감 정보를 제 3자가 가로챌 수 있다.

1.2. HTTPS

HTTPS(HyperText Transfer Protocol Secure)는 SSL/TLS 인증서를 통해 기존 HTTP에 보안 계층을 추가하였다. 443번 포트를 사용하며, 아래와 같은 프로세스를 통해 통신한다.

  1. 브라우저에 https://pickple.kr 형식을 입력하여 HTTPS 사이트를 방문한다.
  2. 브라우저는 서버에 SSL 인증서를 요청하여 사이트의 신뢰성을 검증하려고 시도한다.
  3. 서버는 공개키가 포함된 SSL 인증서를 응답한다.
  4. 브라우저는 SSL 인증서의 유효성을 검증한다. 이후 공개키를 사용하여 세션키를 발급하고 서버에 전송한다.
  5. 서버는 비밀키를 사용하여 브라우저에서 발급한 세션키를 얻는다.