HTTP와 HTTPS 차이점
- HTTPS 는 암호화 및 인증이 포함된 HTTP 이다 .
- 두 프로토콜의 유일한 차이점은 HTTPS가 TLS ( SSL )를 사용하여 일반 HTTP 요청 및 응답을 암호화하고 해당 요청 및 응답에 디지털 서명한다는 것.
- 결과적으로 HTTPS는 HTTP보다 훨씬 더 안전하다.
- HTTP를 사용하는 웹사이트는 URL에 http://가 있고 HTTPS를 사용하는 웹사이트는 https://가 있다.
HTTP란?
- HTTP는 Hypertext Transfer Protocol의 약자이며 네트워크를 통해 데이터를 전송하는 데 사용되는 프로토콜이다.
- 웹 사이트 콘텐츠 및 API 호출을 포함하여 인터넷을 통해 전송되는 대부분의 정보는 HTTP 프로토콜을 사용한다.
- HTTP 메시지에는 요청과 응답이라는 두 가지 주요 종류가 있다.
HTTP 요청/응답
- HTTP 요청은 사용자가 웹 속성과 상호 작용할 때 사용자의 브라우저에서 생성된다.
- 예를 들어 사용자가 하이퍼링크를 클릭하면 브라우저는 해당 페이지에 나타나는 콘텐츠에 대한 일련의 "HTTP GET" 요청을 보낸다.
- 누군가 Google에서 "HTTP가 무엇인가요?"라고 검색하면 어떤한 페이지는 검색 결과에 표시되며 링크를 클릭하면 브라우저가 페이지를 렌더링하는 데 필요한 정보를 얻기 위해 일련의 HTTP 요청을 생성하고 보낸다.
- 이러한 HTTP 요청은 모두 origin server 또는 proxy caching server로 이동하며 해당 서버는 HTTP 응답을 생성한다.
- HTTP 응답은 HTTP 요청에 대한 응답을 의미한다.
HTTP 요청의 모습
HTTP 요청은 HTTP 프로토콜을 따르는 일련의 텍스트 줄이다. GET 요청은 다음과 같다.
- 사용자의 브라우저에서 생성된 이 텍스트 섹션은 인터넷을 통해 전송된다.
- 문제는 연결을 모니터링하는 모든 사람이 읽을 수 있는 일반 텍스트로 위와 같이 전송된다는 것
- 이는 사용자가 웹사이트나 웹 애플리케이션을 통해 민감한 데이터를 제출할 때 특히 문제가 된다.
- 오고가는 데이터는 암호, 신용 카드 번호 또는 양식에 입력된 기타 데이터일 수도 있고 HTTP에서는 이 모든 데이터가 누구나 읽을 수 있도록 일반 텍스트로 전송된다.
- 웹 사이트에서 HTTPS 대신 HTTP를 사용하는 경우 세션을 모니터링하는 모든 사람이 모든 요청과 응답을 읽을 수 있다.
- 즉, 헤커는 요청 또는 응답의 텍스트를 읽고 누군가가 요청하거나 보내거나 받는 정보를 정확히 알 수 있다.
HTTPS란?
- HTTPS의 S는 "보안(Secure)"을 의미한다.
- HTTPS는 TLS(또는 SSL)를 사용하여 HTTP 요청 및 응답을 암호화하므로 공격자는 텍스트 대신 겉보기에 무작위로 보이는 암호화된 여러 문자를 보게 된다.
헤커는 아래와 같은 데이터 대신에
다음과 같은 것을 보게 된다.
t8Fw6T8UV81pQfyhDkhebbz7+oiwldr1j2gHBB3L3RFTRsQCpaSnSBZ78Vme+DpDVJPvZdZUZHpzbbcqmSW1+3xXGsERHg9YDmpYk0VVDiRvw1H5miNieJeJ/FNUjgH0BmVRWII6+T4MnDwmCMZUI/orxP3HGwYCSIvyzS3MpmmSe4iaWKCOHQ==
HTTPS에서 TLS/SSL은 HTTP 요청 및 응답을 어떻게 암호화하는가?
- TLS는 공개키 암호화 라는 기술을 사용한다 .
- 공개키(public key)와 개인키(private key)의 두 가지 키가 있으며 공개키는 서버의 SSL 인증서를 통해 클라이언트 장치와 공유된다.
- 클라이언트가 서버와의 연결을 열면 두 장치는 공개키 및 개인키를 사용하여 세션키(session keys) 라고 하는 새로운 키에 동의하여 둘 사이의 추가 통신을 암호화한다.
- 그런 다음 모든 HTTP 요청과 응답은 이 세션키로 암호화되므로 통신을 가로채는 사람은 일반 텍스트가 아닌 임의의 문자열만 볼 수 있다.
HTTPS는 웹 서버를 인증하는 데 어떻게 쓰이는가?
- HTTP에서는 신원 확인이 없으며 신뢰 원칙을 기반으로 한다. 그러나 현대 인터넷에서는 인증이 필수적입니다.
- ID 카드가 개인의 신원을 확인하듯이 개인키는 서버 신원을 확인한다.
- 클라이언트가 origin server와 채널을 열 때(예: 사용자가 웹 사이트를 탐색할 때) 웹 사이트 SSL 인증서의 공개키와 일치하는 개인키를 소유하면 서버가 실제로 웹 사이트의 합법적인 호스트임을 증명한다.
- 이렇게 하면 다음과 같이 인증이 없을 때 발생할 수 있는 여러 공격을 방지하거나 차단하는 데 도움이 된다.
- On-path attacks
- DNS hijacking
- BGP hijacking
- Domain spoofing
또한 SSL 인증서는 인증서를 발급한 인증 기관에서 디지털 서명된다. 이를 통해 서버가 자신이 주장하는 사람인지 확인할 수 있다.
[ 참고 자료]
https://www.cloudflare.com/ko-kr/learning/ssl/why-is-http-not-secure/
[ AWS로 https 설정하는 법 참고자료 ]
https://velog.io/@server30sopt/EC2-HTTPS%EB%A1%9C-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0
'항해99 개발 일지 > [Final] 실전 프로젝트' 카테고리의 다른 글
[11] Docker (1) (0) | 2023.01.17 |
---|---|
[10] Spring Security Refresh Token (2) (0) | 2023.01.14 |
[08] Spring Security + Refresh Token (1) (0) | 2023.01.12 |
[07] 1주차 기술멘토링 피드백 정리 (1) | 2023.01.11 |
[06] Spring Security 인증인가 - 예외 커스텀 핸들링 (0) | 2023.01.11 |