개발여행

HTTP와 HTTPS의 차이가 뭔가요? 본문

CS

HTTP와 HTTPS의 차이가 뭔가요?

jbilee 2024. 7. 20. 14:03

HTTP(HyperText Transfer Protocol)는 컴퓨터와 컴퓨터가 서로 대화할 때 사용하는 프로토콜 중 하나다. 네트워크로 연결된 컴퓨터끼리 데이터도 주고 받을 수 있는데, 우리가 인터넷(웹)에서 웹사이트에 접속하는 것도 이 과정을 거쳐 이루어진다. 웹에 연결해 데이터를 요청하는 쪽이 클라이언트, 요청 받은 데이터를 보내주는 쪽이 서버다.

 

HTTP 프로토콜을 통해 클라이언트와 서버간에 전송되는 데이터는 암호화되지 않은 순수 텍스트의 형태를 하고 있다. 만약 통신 중간에 난입하는 공격자가 있다면 통신되고 있는 내용을 읽을 수 있을 뿐만 아니라 가로채거나 조작할 수도 있다. 로그인 같은 중요한 통신을 하는 경우에는 사용자의 로그인 정보가 공격자에게 넘어갈 수 있다.

 

때문에 이런 보안성 문제를 해결하기 위해 만들어진 것이 HTTPS(HyperText Transfer Protocol Secure)다. 보안에 중점을 둔 특수한 프로토콜인 SSL(Secure Sockets Layer)나 TLS(Transport Layer Security)를 써서 데이터를 암호화한 뒤에 주고 받는다.

 

HTTPS 프로토콜을 사용하는 웹사이트에 접속해야 이 보호된 통신을 이용할 수 있다. 주소에 https://가 달린 사이트에 접속하면 클라이언트 역할을 하는 브라우저가 먼저 서버에 SSL 또는 TLS 인증서를 요청한다. 인증서가 있다면 검증한 다음에 브라우저와 서버가 함께 암호화된 통신을 설정하게 된다. 데이터 보안 정책에는 우리가 따르고 실천해야 하는 3가지 카테고리가 있다:

  • 기밀성(Confidentiality): 데이터를 암호화해 공격자가 내용을 볼 수 없게 한다
  • 무결성(Integrity): 데이터를 주고받는 과정에서 변조되지 않았음을 보장한다
  • 진정성(Authenticity): 신뢰할 수 있는 서버인지를 인증서를 통해 확인한다

웹개발을 할 때 호스팅 서비스를 사용하지 않고 직접적으로 HTTPS에 배포하려면 보안 인증서를 구매하고 서버에 설치해야 한다. 무료 인증서라는 옵션도 있지만 CA(Certificate Authority)라고 하는 신뢰할 수 있는 기관으로부터 확실하게 SSL/TLS 인증서를 구매하는 것이 적절하다.

 

프론트엔드에서는 프로토콜이 HTTP일 경우 자바스크립트에서 쿠키와 관련된 함수를 사용할 수 없도록 돼있고, 클라이언트와 서버가 서로 다른 프로토콜에서 API 통신을 시도하면 1차적으로 브라우저가 차단하기 때문에 HTTPS의 특징을 잘 알고 있으면 개발도 수월해질 거라고 생각한다.