HTTP(Hyper Text Transfer Protocol)란?
[서버와 클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜이다.]
HTTP는 인터넷에서 Hyper Text를 교환하기 위한 통신 규약이므로 , 80번 포트를 사용하고 있다.
HTTP 서버가 80번 포트에서 요청을 기달리고 있으며 , 클라이언트는 80번 포트로 요청을 보내게 된다.
HTTP(Hyper Text Transfer Protocol)의 구조
HTTP는 어플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다. HTTP는 상태를 가지고 있지 않는
Stateless(무상태 프로토콜)이며 Method , Path , Vesion , Headers , Body 등으로 구성이된다.
HTTP는 암호화가 지원되지 않는 평문 데이터를 전송하는 프로토콜이기 때문에 , HTTP로 비밀번호 , 주민등록번호
등을 주고 받으면 제3자가 정보를 조회할 수 있다는 치명적인 단점을 가지고있다. 이러한 문제를 해결하기 위해서
HTTPS가 등장하게 된다.
HTTPS(Hyper Text Transfer Protocol Secure)란?
[HTTP에 암호화가 추가된 프로토콜이다.!]
HTTPS는 HTTP와 다르게 443번 포트를 사용하며 , 네트워크 상에서 HTTP와 다르게 중간에서 제3자가 볼 수 없도록 암호화를 지원하고 있다..!
[대칭키 암호화와 비대칭키 암호화]
HTTPS는 대칭키 암호화와 비대칭키 암호화 방식을 둘 다 사용하고 있다. 각각의 암호화 방식을 알아보자.
- 대칭키 암호화
- 클라이언트와 서버가 동일한 키를 사용하여 암호화와 복호화를 진행한다.
- 키가 노출되면 매우 위험하다. 하지만 연산속도가 빠르다는 장점이 있다.
- 비대칭키 암호화
- 1개의 쌍으로 구성되어 있는 공개키와 개인키를 암호화와 복호화를 하는데 사용한다.
- 키가 노출되더라도 비교적 안전하다. 하지만 연산속도가 대칭키보다 느리다.
대칭키는 비교적 쉬운 개념이다 , 비대칭키에 대해서 조금 더 상세히 알아보자.
비대칭키 암호화는 공개키와 개인키 암호화 방식을 이용하여 데이터를 암호화 하고있다. 공개키와 개인키는 서로를 위한
1쌍의 키이다.
- 공개키: 모두에게 공개 가능한 키이다.
- 개인키: 나만 가지고 알고 있어야 하는 키이다.
암호화를 공개키로 하냐 개인키로 하냐 얻는 효과가 다르다. 공개키와 개인키로 암호화 하면 각각 다음과 같은 효과를 얻을 수 있다.
- 공개키 암호화: 공개키로 암호화 하면은 개인키로만 복호화를 할 수 있다. -> 위에 설명했듯이 개인키는 나만 알고 있는 키이다. 그러므로 나만 볼 수 있다.
- 개인키 암호화: 개인키로 암호화 하게 되면은 공개키로 복호화 할 수 있다(공개키 암호화와 반대이다). -> 공개키는 모두에게 공개 가능한 키이므로 , 내가 인증한 정보임을 알리며 신뢰성을 보장할 수 있다.
[HTTPS의 동작 과정]
HTTPS는 대칭키 암호화와 비대칭키 암호화를 모두 사용해서 빠른 연산 속도와 안전성을 모두 갖추고 있다.
HTTPS 연결 과정(Hand-Shaking)에서는 먼저 클라이언트와 서버간에 세션키를 교환을 한다. 여기에서 세션키란? 주고 받는 데이터를 암호화하기 위해 사용되는 대칭키 이며, 데이터 간의 교환에서는 빠른 연산 속도가 필요하기 떄문에 세션키는 대칭키로 만들어 진다.
하지만 이 과정에서 세션키를 클라이언트와 서버가 어떻게 교환 할 것인지 인데 , 이 과정속에서 비대칭키가 사용이된다.
처음 연결을 성립하여 안전하게 세션키를 공유하는 과정에서 비대칭 키가 사용이 되는것이고, 이후에 데이터를 교환하는 과정에서 빠른 연산 속도를 위해서 대칭키가 사용이 되는것이다.
[HTTP와 HTTPS의 차이]
HTTP는 암호화 되지 않으므로 보안에 취약하다. 하지만 HTTPS는 HTTP와는 달리 암호화가 되기 때문에 안전하게 데이터를 주고 받을 수 있다. 하지만 HTTPS는 암호화와 복호화 과정이 필요하기 때문에 HTTP보다는 속도가 느리다.
또한 HTTPS는 인증서를 발급 그리고 유지하기 위해 비용이 든다.
최종적으로 개인정보와 민감한 데이터를 주고 받아야 할 때는 HTTPS를 사용하는 것이 맞으며 , 노출이 되어도 괜찮은 단순정보들 같은 경우만 처리 되어도 됀다면 HTTP를 사용하면 된다 .
좋은 글 공유해주셔서 감사합니다. 더 자세한 내용을 보고 싶으시다면 아래 링크로 가주세요!
[출처]
'IT' 카테고리의 다른 글
| [웹 서버와 WAS의 차이점] 알아두면 유용한 필수 개념 간단 정리! (0) | 2022.12.19 |
|---|---|
| [OAuth 2.0] 간편한 소셜 로그인과 보안의 핵심 기술? (0) | 2022.12.13 |
| [HTTP의 특징과 쿠키 및 세션의 활용] 안정적 인증을 위한 필수 지식 (0) | 2022.12.12 |
| [MyBatis 에서의 클래스 별칭 설정] @Alias 활용 방법과 XML 매핑 간소화 (0) | 2022.10.19 |
| [GET chrome-extension://invalid/ net::ERR_FAILED] 해결 방법 (0) | 2022.09.28 |