HTTP(Hyper Text Transfer Protocol)?
HTTP란 많은 프로토콜 중에 서버와 데이터를 주고받기 위한 프로토콜이다.
HTTP는 인터넷상에서 하이퍼텍스트를 주고 받기 위한 통신 규약이고 많은 포트 중에 80번을 사용하고 있다.
HTTP의 구조
HTTP는 TCP/IP에서 작동한다. TCP/IP는 애플리케이션 레벨의 프로토콜이다.
또한, HTTP는 Stateless의 프로토콜 중 하나이고
위에 이미지에서 보다시피 HTTP의 구성요소를 볼 수 있다.
하지만 이런 프로토콜의 단점이라고 하면 암호화가 되어있지 않아서 평문의 데이터를 그대로 보내기 때문에 중요한 정보나 데이터를 보내면 다른 사람이 데이터를 조회할 수 있다. 만약에 그런 일이 일어난다면 매우 큰일이 일어날 수 있다. 그래서 등장한 프로토콜이 HTTPS이다.
HTTPS(Hyper Text Transfer Protocol Secure)?
HTTPS는 HTTP가 안전하지 않을 것을 보완하여 데이터 암호화가 추가되어 등장한 프로토콜이다.
HTTPS는 HTTP가 사용하는 포트인 80이 아닌 443을 사용하는 프로토콜이다. 또한 암호화가 되지 않는 HTTP와 반대로 암호화를 하여 누군가 정보를 조회할 수 없도록 할 수 있다.
HTTPS의 암호화 방식
HTTPS는 비대칭키와 대칭키 암호화 방식을 모두 사용하여 보안에 신경쓰는 프로토콜이다.
- 대칭키 암호화
- 서버와 클라이언트가 똑같은 키를 가지고 암호화 및 복호화를 진행한다.
- 같은 키를 가지고 있어 위험하지만 연산속도가 매우 빠르다.
- 비대칭키 암호화
- 공개키와 개인키로 구성하여 암호화 및 복호화할 때 사용한다.
- 키가 노출 되어도 대칭키 암호화보다 비교적 안전하지만 연산 속도에서 느린 단점이 있다.
여기서 공개키와 개인키를 잠깐 설명하자면
- 공개키: 모두가 알고 있어도 되는 키
- 개인키: 나만 가지고 있고 나만 알아야 하는 키
공개키와 개인키가 포함해서 총 2개이기 때문에 암호화의 방법에서도 두 가지가 존재하고 두 가지의 장단점도 물론 존재한다.
- 공개키 암호화: 공개키를 이용하여 암호화를 하게 되면 개인키로는 복호화를 할 수 있다
- 장점이자 단점은 그 정보를 개인키를 가지고 있는 나만 볼 수 있다는 것이다
- 개인키 암호화: 개인키로 암호화를 하게 되면 공개키로 복호화를 할 수 있다.
- 이런 암호화는 공개키는 모두가 가지고 있으므로 복호화를 하여 정보를 볼 수 있고 나의 개인키로 암호화를 하였기 때문에 신뢰성을 높일 수 있다.
HTTPS의 동작 플로우
HTTPS는 대칭키와 비대칭키 암호화를 모두 사용하기 때문에 안전하고 빠르다.
HTTPS 연결과정에서 먼저 서버와 클라이언트가 세션키를 교환한다.
여기서 말하는 세션키는 서로 주고받는 데이터를 암호화하기 위한 대칭키이다. 왜냐하면 데이터를 주고 받기 위해서는 빠른 연산 속도가 필요하기 때문에 대칭키와 비대칭키 중에 연산 속도가 빠른 대칭키를 세션키로 사용하는 것이다.
하지만 세션키를 대칭키로 만들기 위해서는 비대칭키 암호화를 사용해야 하는데 서버와 클라이언트가 세션키를 공유하기 위해 주고 받는 과정에서 비대칭키가 사용된다.
실제로 HTTPS의 연결이 성립되는 흐름을 보자면
- 클라이언트가 연결을 시도
- 서버는 인증서(공개키)를 클라이언트에게 넘김
- 넘겨받은 인증서를 클라이언트가 유효한지 검사 후에 세션키를 발급
- 발급받은 세션키를 클라이언트가 저장한 후에 받은 인증서(공개키)로 암호화를 진행한 뒤에 서버로 전달
- 서버는 받은 세션키를 자신의 개인키로 복호화 한 후에 저장
- 이제 서로 세션키를 주고받고 둘 다 가지고 있으니 정보들을 세션키로 암호화 및 복호화하며 통신
정리
HTTP는 암호화가 되어있지 않는 프로토콜로 안전하지 않은 반면에 HTTPS는 암호화가 추가되어 보안이 좋은 프로토콜이다.
하지만 HTTPS는 암호화 및 복호화의 과정으로 속도가 느린 반면에 HTTP는 별도의 과정이 없어 속도가 빠르다.
또한, HTTPS는 인증서와 별도의 유지비용이 더 청구되는 단점이 있다.
그러하면 우린 어떨 때 HTTP와 HTTPS를 사용하고 유용하게 쓰일 수 있을까?
HTTP는 암호화가 되어있지 않아 중요한 정보를 담지 못한다는 단점이 있지만 그리 중요하지 않은 정보를 전달할 때는 빠르게 통신할 수 있는 장점이 있다. 그럼 반대로 HTTPS는 암호화가 진행되기 때문에 HTTP에 담아 보낼 수 없거나 보안에 걱정되는 정보들을 암호화하여 보낼 수 있는 것들을 안심하고 보낼 수 있다.
이렇게 암호화가 되어있는 것이 무조건 좋다고는 할 수 없다고 말할 수 있다. 프로토콜은 규약일뿐이지 정답은 없다.
쓰임에 따라 달리 사용하는 게 좋다고 생각한다.
'cs' 카테고리의 다른 글
[cs] J W T(Json Web Token) (0) | 2024.10.21 |
---|---|
[cs] 싱글톤의 장점과 단점 (0) | 2024.09.23 |
[cs] Proxy란 (0) | 2024.09.01 |
[cs]토폴로지(topology)란? (0) | 2024.05.17 |