Computer Science

CS) HTTP, HTTPS

snowe 2021. 3. 5. 00:38

https://velog.io/@pilyeooong/HTTP와-HTTPS

HTTP?

Hyper Text Transfer Protocol의 약어로써 W3(www) 상에서 서로 다른 시스템 간의 정보를 주고받을 수 있는 가장 기초적인 프로토콜이다. 우리가 웹 서핑을 할 때 서버에서 브라우저로 데이터 전송을 해 주는 용도로 가장 많이 사용된다.

이러한 HTTP는 인터넷의 초기에 모든 웹사이트에서 기본적으로 사용되었던 프로토콜이기도 하다.

프로토콜: 복수의 컴퓨터 사이나 중앙 컴퓨터와 단말기 사이에서 데이터 통신을 원활하게 하기 위해 필요한 통신 규약

 

HTTPS?

HTTP에는 치명적인 문제점이 있었다. 이름에서 알 수 있듯 Text를 Transfer 하는 방식으로 통신을 하는데, 서버에서부터 브라우저로 전송되는 정보가 암호화되지 않았기 때문에 보안상의 문제가 생겨났다.

 

그리하여 탄생한 것이 Hyper Text Transfer Protocol Secure, HTTPS이다.

HTTPS 프로토콜은 SSL(보안 소켓 계층)을 사용함으로써 이 문제를 해결하였는데, 여기서 SSL은 인터넷 상에서 정보를 암호화하는 프로토콜이다.

현재는 SSL3.0 기반으로 만들어진 TLS가 사용이 된다.

 

HTTPS 통신 방법

1. Client가 Server에 최초 접속 시 Client는 3가지 정보를 보낸다

  • Client가 만든 Random Data
  • 세션 ID
  • Client가 지원하는 암호화 방식 목록

2. Server에서도도 3가지 정보를 보낸다

  • Server가 만든 Random Data
  • Server가 결정한 암호화 방식
  • 인증서(CA)-public key로 암호화 된 서비스 정보가 포함되어 있음

3. Server가 보낸 인증서가 CA에서 발급된 것인지 확인

  • Client는 내장된 CA 리스트를 확인함
  • 리스트에 없다면 사용자에게 경고해준 뒤, 리스트에 없는 기관인지 확인하기 위해 내장된 CA 공개키를 이용하여 인증서를 복호화
  • 복호화에 성공했다면 CA의 개인키로 암호화 된 문서임을 보증하는 것 = 신뢰 가능 ➡️ 대칭키 방식(public, private key를 사용하는 암호화 방식)

4. 이제 서로가 신뢰 관계이므로 랜덤 데이터를 교환

  • Client는 교환한 랜덤 데이터를 조합하여 비밀키 생성, 서버에 전달할 때에는 공개키 방식을 사용하여 전송
  • 공개(public) 키는 인증서 안에 있으며, 공개키로 암호화된 데이터는 비공개(private) 키로만 복호화가 가능함. 서버는 자신이 가진 비공개 키로 복호화 진행
  • 이 과정을 통해 Server와 Client는 대칭키(sesson key)를 공유하게 됨

5. 공유한 대칭키(session key)를 이용해서 암호화 하여 실제 데이터를 주고받음

6. 데이터 전송이 끝나면(session end) 통신에서 사용한 대칭키(session key)를 폐기함

 

위와 같은 일련의 과정 속에서 HTTPS는 대칭키와 비대칭키(public, private) 암호화 두 가지를 모두 사용한다. 대칭키를 주고받을 때는 비대칭키 암호화를 통해 교환하고, 키를 교환한 이후부터는 서로 대칭키를 이용해서 암호화하여 데이터를 주고받는다.

 

대칭키와 비대칭키는 다음과 같은 특징을 가지고 있다.

 

대칭키

  • 한 개의 key로 암호화 복호화
  • 속도가 빠름
  • 탈취의 위험이 있음

비대칭키 (공개키, 비밀키)  

  • 공개키로 암호화, 비밀키로 복호화
  • 속도가 느림
  • 인증 기능 제공

그중에서 대칭키의 단점 (1개의 키를 공유하면서 해킹당할 수 있는 위험), 공개키의 단점(속도가 느리고, 많은 컴퓨팅 파워가 필요)을 상호 보완하기 위해 HTTPS는 대칭키와 공개키 암호화를 사용한다.