Intro
안녕하세요. 환이s입니다👋
오늘은 HTTP, 그리고 HTTPS의 차이점에 대해 포스팅을 해보려 하는데요.
흔히 듣고 쓰는 개념이지만 이 역시 기술용어인 만큼 정확하게 이해하기는 쉽지 않습니다.
HTTP와 HTTPS, 그리고 둘을 구분하는 결정적인 지점은 무엇인지 알아보겠습니다🙂
HTTP(HYPERTEXT TRANSFER PROTOCOL)
웹 상에서 클라이언트와 서버가 서로 정보를 주고받을 수 있도록 하는 규약입니다.
우선 클라이언트는 서버에 정보(데이터) 전송을 요청(Request)할 수 있는 클라이언트 소프트웨어(크롬, IE, 사파리 등 웹 브라우저)가 설치된 컴퓨터(스마트폰 등을 포괄하는, 연산하는 기계의 개념)를 의미합니다.
클라이언트는 URL(Uniform Resource Locator)로 된 HTTP를 통해 서버에게 정보 송신을 요청합니다.
우리가 평소에 쓰는 URL 구조를 구분해 살피면 각각은 아래와 같은 의미를 가집니다.
위 그림의 URL을 기반으로 각 의미를 해석해 보면 다음과 같습니다.
- http:// : 자원에 접근하기 위한 http 프로토콜입니다.
- www.wishket.com : 서버의 위치를 의미합니다.
- company-intro : 서버에서 컴퓨터가 요청한 자원의 위치를 의미합니다.
클라이언트가 이렇게 정보 송신을 요청하면 서버는 대응합니다.
서버는 응답하는(Response) 소프트웨어(아파치, nginx, IIS 등)가 설치된 컴퓨터를 의미합니다.
그리고 서버는 클라이언트의 요청을 해석하고 클라이언트의 요청 및 서버 관리자가 설정한 알고리즘에 준하는 정보를 클라이언트에게 송신합니다.
또 다른 특징으로는 HTTP는 TCP/IP 위에서 동작하는 애플리케이션 계층의 프로토콜이면서 하이퍼텍스트를 교환하기 위한 통신 규약으로, 80번 포트를 사용합니다.
또한, HTTP는 인증서가 필요하지 않지만 그렇기에 웹사이트가 신뢰할 수 있는지를 확인하는 것이 어려운 단점이 있습니다.
4xx,5xx Error?
HTTP를 통한 클라이언트와 서버의 송수신 과정
즉, 웹서핑 과정 중 숫자가 적힌 에러 화면이 나오는 순간을 경험해 보신 적이 있을 겁니다.
이 숫자들은 오류 상황에 맞춰 '이 오류가 어떤 조건에 의해 발생한 오류다.'라는 걸 클라이언트에게 구분하여 알려주는 것을 목적합니다.
4xx로 시작하는 경우는 클라이언트의 오류를,
5xx로 시작하는 경우는 서버 오류를 의미하며, 그중 몇의 의미는 아래와 같습니다.
- 403 Error : 서버가 요청을 거부하는 경우입니다. 사용자가 필요한 권한을 갖고 있지 않을 때 발생합니다.
- 404 Error : Not Found, 클라이언트가 HTTP를 통해 송신 요청한 정보를 서버가 가지고 있지 않을 때 등장합니다.
- URL 중 서버까진 맞았는데 그다음이 틀렸을 때 해당 에러가 나옵니다. 서버가 보유하지 않은 정보 자원임을 의미합니다.
- 500 Error : 서버 오류, 서버에 뭔가 오류가 있어 요청을 지금 수행할 수 없는 경우 해당 에러가 발생합니다.
HTTPS
HTTPS(HyperText Transfer Protocol over Secure Socket Layer)는 HTTP를 보완하는 수단입니다.
HTTP는 암호화되지 않았기 때문에 도난이나 변조, 도청이 가능하지만, 반대로 HTTPS는 HTTP의 일반 텍스트(TEXT)에 SSL이나 TLS프로토콜을 씌워 통해 데이터를 암호화하는 기법이며, 로그인이나 결제화면에서 주로 쓰입니다.
HTTPS를 사용하는 경우 URL에서 http://가 아닌 https://를 사용합니다.
그렇다면 HTTPS의 암호화의 전송을 이해하는데 필요한 개념들에 대해 바로 알아보겠습니다.
- 암호화 : 어떤 정보를 암호화된 정보로 바꾸는 것입니다.
- 복호화 : 암호화된 정보를 다시 원래 정보로 바꾸는 것입니다.
- 키 : 암호화, 복호화할 때 쓰는 비밀번호입니다.
- HTTPS는 공통 키 방식과 비대칭 키 방식을 같이 사용합니다.
공통 키 방식?
공통 키 방식은 암호화할 때와 복호화할 때 같은 키를 사용하는 방식으로, 단순한 구조로 CPU를 적게 쓰고 빠르다는 장점이 있습니다.
하지만 공통 키를 빼앗기면 복호화를 할 수 있으므로 보안에 취약하다는 단점도 있습니다.
비대칭 키 방식?
비대칭 키 방식은 암호화할 때와 복호화할 때 다른 키를 사용하는 비대칭 방식으로, 클라이언트는 공통 키를, 서버는 인증서와 공개 키를 제공하며 클라이언트는 서버가 제공한 공개 키를 통해 암호화하여 서버에게 전송합니다.
서버는 수신한 HTTPS의 인증서와 공개 키 일치를 바탕으로 공통 키를 복호해 요청에 대응합니다.
비대칭 키 방식은 키 전송과정 중 해킹당해도 해커가 해독을 할 수 없으니 공통 키 방식보다는 보안이 더 우수하지만, 공통 키 방식보다 느리고 리소스 소비가 크다는 단점이 있습니다.
그렇다면 HTTPS가 두 키 방식을 같이 쓴다는 건 ?
앞서 말씀드린 것처럼 공통 키 방식과 비대칭 키 방식을 같이 사용한다고 언급하였습니다.
비대칭 키 방식이 가진 이점은 이어가되 전송 소요시간 및 리소스 부담은 줄이는 방식으로, HTTPS를 통한 통신이 시작될 때, 서버는 서버가 제공한 공개 키와 증명서에 부합하는 요청을 클라이언트가 보냈는지를 확인합니다.
클라이언트가 공통 키를 서버가 제공한 공개 키로 암호화해 서버에게 보낸 첫 번째 요청을 복호화하는 과정을 핸드셰이크(Handshake)라고 부르는데, 이 과정이 끝나면 실제 요청과 정보를 교환하는 과정이 이어집니다.
그리고 서버가 제공하는 비대칭 키(=공개 키)를 사용하여 클라이언트는 서버에게 보낼 공통 키를 암호화하고, 서버는 클라이언트가 보낸 암호화된 요청을 비대칭 키로 복호화합니다.
결과적으로 클라이언트와 서버는 서버가 제공한 비대칭 키를 통해 암호화된 공통 키로 통신합니다.
HTTP와 HTTPS의 차이점
지금까지 HTTP와 HTTPS에 대해 알아봤습니다.
이 두 프로토콜의 유일한 차이점은 HTTPS는 TLS(SSL)를 사용하여 일반 HTTP 요청과 응답을 암호화하고 해당 요청과 응답에 디지털 서명을 한다는 점입니다.
그 결과로 HTTPS는 HTTP보다 훨씬 더 안전하고, HTTP를 사용하는 웹 사이트의 URL은 http:// , HTTPS를 사용하는 웹 사이트는 https://입니다.
마치며
오늘은 HTTP와 HTTPS의 개념 및 차이점에 대해 알아봤습니다.
다음 포스팅에서 뵙겠습니다.
'[ Concept ]' 카테고리의 다른 글
[ Concept ] TDD(테스트 주도 개발) - 개념 및 프로그래밍 방법 알아가기 (31) | 2024.12.20 |
---|---|
[ Concept ] 프로젝트 산출물 - 화면설계서 (3) | 2024.12.04 |
[ Concept ] SSO(Single Sign-On) 통합 인증 알아가기 (0) | 2024.07.11 |
[ Concept ] 분산 코디네이터 Zookeeper(주키퍼) 알아가기 (0) | 2024.05.20 |
[ Concept ] 대용량 / 실시간 데이터 처리를 위한 오픈 소스 (Apache Kafka) (0) | 2024.05.17 |