HTTP란? | HTTPS, 동작 원리, 공개키 암호화

1. HTTP와 HTTPS

HTTP는 인터넷에서 데이터를 주고받는 통신 프로토콜입니다. 클라이언트/서버 구조에서 클라이언트는 서버에 요청을 하고, 서버는 클라이언트로 응답을 합니다. HTTP는 비연결성 특징이 있습니다. 클라이언트와 서버가 계속 연결되어 있지 않고 요청 후 응답 후 연결을 끊어버립니다. 그래서 이전 상태 정보나 현재 통신 상태가 남아 있지 않습니다.

HTTPS는 HTTP에 보안 기능을 강화한 프로토콜입니다. 본래 HTTP는 보안을 염두에 두지 않고 설계된 프로토콜이라 모든 요청이 평문(일반 문자열)입니다. 그래서 보안에 매우 취약합니다. 특히 스니핑과 같은 해킹으로 HTTP 전문을 볼 수 있어서 비밀번호, 개인정보와 같은 중요 데이터를 보호하지 못하는 문제가 있습니다.

 

 

이를 방지하고자 나온 게 HTTPS입니다. HTTPS는 기존 HTTP 요청과 응답을 공개키 암호화 방식을 사용해서 암호화한 프로토콜입니다. 패킷이 암호화되기 때문에 해커가 스니핑을 한다고해도 어떤 내용인지 알 수 없어서 비밀번호나 개인정보가 노출되지 않게 됩니다.

HTTPS는 HTTP의 암호화 통신 버전입니다. HTTP 프로토콜의 기본 통신 포트는 80포트이고 HTTPS 프로토콜의 기본 통신포트는 443포트입니다.

정리하면 아래와 같습니다.

  • HTTP는 비연결성 통신이라 자원 낭비를 줄일 수 있지만, 클라이언트의 상태를 유지할 수 없는 단점이 있습니다. 하지만 쿠키¹나 세션²을 사용하면 상태 정보를 유지할 수 있습니다.
  • HTTP를 사용하면 다양한 요청에 대한 처리를 할 수 있습니다.
  • HTTPS를 사용하면 통신 내용을 암호화하므로 더 안전합니다.

 

2. HTTP 동작 원리

우리가 웹 브라우저에 https://goldenrabbit.co.kr:3000을 입력한 뒤 enter 키를 눌렀을 때 일어나는 일을 생각해보겠습니다. 도메인은 goldenrabbit.co.kr, 포트 번호는 3000입니다.

웹 브라우저는 먼저 도메인 네임 시스템domain name system, DNS³에 도메인에 해당하는 IP 주소⁴를 요청합니다.

 

 

IP 주소가 목적지(컴퓨터)를 나타낸다면 포트 번호는 수신한 데이터를 놓을 (컴퓨터 내) 창구와 같습니다. 즉 IP 주소는 컴퓨터 자체를, 포트 번호는 해당 컴퓨터 내 데이터를 수신할 수 있는 창구를 의미한다고 볼 수 있습니다. 참고로 컴퓨터는 0 ~ 65535번 포트를 가지고 있습니다.

포트 번호 없이 https://goldenrabbit.co.kr을 입력하면 어떻게 될까요? 포트 번호를 생략하면 기본 포트 번호로 요청을 전송합니다. HTTP 기본 포트 번호는 80번이고 HTTPS의 기본 포트 번호는 443번입니다. 즉, https://goldenrabbit.co.kr을 입력하면 http://goldenrabbit.co.kr:80으로, https://goldenrabbit.co.kr을 입력하면 https://goldenrabbit.co.kr:443으로 요청을 보냅니다.

https://는 데이터를 보내는 통신 규약으로 HTTPS를 사용하겠다는 것을 나타냅니다. HTTPS는 HTTP 규약에 보안 기능을 추가한 통신 규약입니다. HTTP는 하이퍼텍스트 전송 규약(HyperText Transfer Protocol)의 약자로 말 그대로 하이퍼텍스트를 전송하는 통신 규약입니다. 하이퍼텍스트란 하이퍼링크를 포함한 멀티미디어 텍스트로 문자뿐 아니라 그림, 이미지 등의 멀티미디어를 포함하고 다른 문서로 연결되는 링크를 제공하는 문서 포맷입니다. 웹에서 하이퍼텍스트 문서를 사용하기 때문에 문자, 이미지, 음악, 동영상 등을 볼 수 있고 링크를 클릭해서 다른 페이지로 연결될 수 있습니다. 이 하이퍼텍스트 문서를 만들 수 있는 문서 포맷이 바로 하이퍼텍스트 마크업 언어 HyperText Markup Language의 약자인 HTML 포맷입니다.

웹 서버란 특정 포트에서 대기하며 사용자의 HTTP 요청에 HTTP 응답을 전송하는 서버를 말합니다. 이때 응답은 일반적으로 HTML 문서를 전송합니다.

 

 

3. 공개키 암호화 방식

공개키 암호화 방식은 공개키와 비밀키 두 가지 키를 생성해서 공개키는 클라이언트에 알려주고 비밀키는 서버에 비공개 상태로 놔두게 됩니다. 클라이언트에서 HTTPS 요청을 보낼 때 공개키로 암호화하고 서버는 비밀키를 이용해서 다시 원문으로 돌리는 복호화를 하게 됩니다. 그래서 해커가 공개키를 획득한다 해도 비밀키가 없으면 메시지를 복호화할 수 없어 안전합니다. 공개키 암호화 방식은 암호화와 복호화에 쓰이는 키가 서로 다르기 때문에 비대칭 암호화 방식입니다. 공개키 암호화 방식에서는 비밀키가 노출되지 않도록 각별히 주의해야 합니다.

개인정보를 수집하고 외부로 공개되는 사이트는 반드시 인증기관을 통해 인증받은 인증서를 사용하도록 법으로 강제하고 있습니다. 공인 기관에서 인증을 받지 않은 사이트는 보안 경고가 뜰 수 있습니다.

 

3.1 왜 인증을 받아야 할까?

공개키 암호화 방식은 통신 내용이 암호화되기 때문에 해커가 통신 내용을 감청해도 안전합니다. 그런데 왜 여기에 또 공인기관의 인증을 받아야 할까요? 그것은 해커가 웹 사이트를 가장할 수 있기 때문입니다. 이것을 피싱(Phishing) 사이트라고 합니다. 예를 들어 겉모양을 은행 사이트와 똑같이 만든 뒤 사용자의 비밀번호와 같은 개인정보를 입력하라고 요청할 수 있습니다. 이때 HTTPS 프로토콜을 지원하기 위해서 해커가 만든 공개키를 클라이언트에 보내서 암호화하라고 할 수 있습니다.

만약 클라이언트에서 이 웹 사이트를 신뢰할 수 있는지 여부를 모른다면 해커가 준 공개키로 패킷을 암호화하게 되고, 해커는 자신이 가진 비밀키로 이것을 복호화해서 알 수 있게 됩니다. 이를 막기 위해서 별도 외부 공인기관을 통해 신뢰할 수 있는 웹사이트인지 인증을 합니다.

웹 사이트 공개키는 외부 공인기관의 비밀키로 다시 암호화되어서 공인기관 내 저장됩니다. 사용자는 인증서를 받게 되고, 그 인증서에는 웹 사이트 공개키 대신 인증정보와 인증 기관의 공개키가 들어있어서 인증기관을 통해 웹 사이트 공개키를 요청하게 됩니다. 그럼으로써 클라이언트는 안전하게 인증된 웹 사이트의 공개키를 받게 됩니다.

따라서 피싱 사이트라고 하더라도 해커가 제공한 공개키가 아닌 공인 인증기관에 저장된 웹 사이트 본래의 공개키로 암호화되어서 해커가 볼 수 없게 됩니다.

 

WRITER

공봉식

17년 차 게임 서버 프로그래머로 다양한 장르의 온라인 게임을 개발했습니다. 넥슨과 네오위즈, EA 등을 거쳐 현재 2K Games에서 근무 중입니다. 「Tucker Programming」 유튜브 채널을 운영합니다.

Leave a Reply

©2020 GoldenRabbit. All rights reserved.
상호명 : 골든래빗 주식회사
(04051) 서울특별시 마포구 양화로 186, 5층 512호, 514호 (동교동, LC타워)
TEL : 0505-398-0505 / FAX : 0505-537-0505
대표이사 : 최현우
사업자등록번호 : 475-87-01581
통신판매업신고 : 2023-서울마포-2391호
master@goldenrabbit.co.kr
개인정보처리방침
배송/반품/환불/교환 안내