[Network] HTTPS, SSL/TLS, 동작 과정

calm0_0·2023년 10월 11일
0

Network

목록 보기
2/2

HTTPS


HTTPS를 사용하는 이유

HTTP는 웹 브라우저와 서버 간 데이터를 주고 받기 위해 사용하는 인터넷 프로토콜이다.

그런데 HTTP에는 다음과 같은 약점이 있다.

  • 평문(암호화하지 않은 텍스트) 통신이기 때문에 도청 가능
  • 통신 상대를 확인하지 않기 때문에 위장 가능
  • 완전성을 증명할 수 없기 때문에 변조 가능
  • 스니핑 스푸핑, 스누핑과 같은 네트워크 공격을 받을 수 있다.

스니핑(Sniffing)

  • sniff: 코를 킁킁거리다
  • 패킷 가로채기 공격, 네트워크 상에 떠돌아다니는 패킷이나 데이터 등을 훔쳐보는 것

스누핑(Snoofing)

  • snoop: 기웃거리다, 염탐하다
  • 네트워크 상에 떠도는 중요 정보를 염탐하여 불법적으로 몰래 획득하는 행위

스푸핑(Spoofing)

  • spoof: 속이다, 사기치다
  • 정상 사용자인척 시스템을 속여 권한을 탈취하고 정보를 빼앗는 행위
  • IP 스푸핑: TCP/IP 패킷의 출발지 IP 주소를 위조하는 스푸핑
  • MAC 스푸핑: IP 스푸핑처럼 MAC 주소를 위조하여 다른 사용자로 위장하여 공격
  • ARP 스푸핑: ARP 테이블의 MAC 주소를 위조하여 데이터가 다른 곳으로 가거나 변조덴 데이터가 전달되게 함 (ARP는 IP주소와 MAC주소를 매핑하는 프로토콜)
  • DNS 스푸핑: DNS 서버의 응답을 위조하여 다른 사이트로 리다이렉션하는 스푸핑. 사용자는 피싱 사이트로 이동된 줄 모르고 로그인 정보나 개인 정보를 입력하는 상황이 발생할 수 있음

이렇게 암호화되지 않은 프로토콜인 HTTP는 보안 이슈가 있고, 이런 문제를 해결해주는 것이 바로 'HTTPS'인 것이다.

HTTPS(HyperText Transfer Protocol Secure) 란

'HTTPS'는 HTTP가 암호화하지 않은 평문으로 통신해서 발생하는 보안 이슈를 해결하기 위해

인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용해 클라이언트와 서버가 자원을 주고 받을 때 사용하는 통신 규약(프로토콜)이다.

HTTPS는 누구나 볼 수 있었던 메시지를 통신하는 당사자들만 볼 수 있도록 암호화하여 HTTP의 보안 문제를 해결했다.


SSL/TLS


HTTPS는 SSL의 껍질을 덮어쓴 HTTP

HTTPS는 새로운 애플리케이션 계층의 프로토콜은 아니다. HTTP 통신을 하는 소켓 부분을 SSL이나 TLS이라는 프로토콜로 대체하고 있을 뿐이다.

OSI 계층 구조로 보면 HTTPS는 다음과 같이 HTTP 프로토콜 아래에 SSL 이라는 보안 프로토콜이 추가된 형태이다.

HTTP와 SSL은 독립된 프로토콜이며, HTTP는 SSL과 통신하고 SSL은 TCP와 통신한다. 또한 HTTP 뿐만 아니라 애플리케이션 계층에서 동작하는 다른 프로토콜(SMTP, FTP)등과 조합해서 사용할 수 있다.

SSL과 TLS

SSL(Secure Sokets Layer)는 클라이언트와 서버가 서로 데이터를 암호화해 통신할 수 있도록 돕는 보안 계층이다. SSL은 공개키 암호화 방식으로 텍스트를 암호화한다.

1990년대 후반 공개된 SSL 2.0에 몇 가지 취약점이 발견되어 이를 해결하기 위해 아예 구조를 재설계해 SSL 3.0을 배포했다. 이후 기존 버전과 구분하기 위해 3.0 이후부터 등장한 SSL의 이름을 TLS(Transport Layer Security)로 변경했다. 현재는 대부분의 보안 프로토콜이 TLS로 교체되어 사용하지만 총칭하여 SSL이라는 익숙한 이름을 사용하기도 한다.


HTTPS 동작 과정


HTTPS(SSL)의 동작 과정은 핸드 세이크, 세션, 세션 종료 세 단계로 이루어진다. TCP와 유사하게 SSL에서도 클라이언트와 서버가 통신할 준비가 되었는지 확인하는 과정인 핸드 세이크를 진행한다.

1단계

  • 클라이언트가 연결을 맺기 위해 서버에 요청을 보낸다.
  • 클라이언트는 랜덤한 데이터와 현재 지원할 수 있는 암호화 방식을 서버에 전달

2단계

  • 서버는 요청에 대한 응답으로 서버 측에서 생성한 랜덤 데이터와 지원 가능한 암호화 방식, SSL 인증서를 전달한다.

    인증서란 서버가 공식으로 인증된 기관인 CA(Certificate Authority)에서 발급받은 문서로, 해당 서버가 신뢰할 수 있는지 보장하는 역할을 한다.

3단계

  • 클라이언트는 서버로부터 받은 인증서를 검증하기 위해 CA가 발급한 인증서 목록 중에서 서버가 전달한 인증서가 있는지 확인한다.
  • 목록에 있다면 CA에서 공유하는 공개 키를 가지고 인증서를 복호화한다.
  • 랜덤 데이터를 조합하여 pre master secret(임시 키)를 생성한다.(데이터 송수신 시 대칭키로 활용)

4단계

  • 클라이언트는 인증서 안에 들어있는 공개키를 이용하여 pre master secret(임시 키)을 암호화하여 서버로 전송한다.
  • 임시 키는 대칭키이기 때문에 중간에 노출되어서는 안되므로 공개키로 암호화하여 서버에 전달

5단계

  • 키를 받은 서버는 자신이 갖고 있던 비밀 키로 pre master secret(임시 키)를 복호화한다.
  • 이제 클아이언트-서버가 같은 키를 공유하게 됨

6단계

  • 클라이언트와 서버의 임시 키는 일련의 과정을 거쳐 세션 키로 바뀌고, 이 세션키를 이용해 통신을 할 수 있게 된다.

세션 및 세션 종료

  • 이후 생성한 세션 키를 이용해 대칭 키 기법으로 데이터를 암호화해서 통신한다.
  • 데이터 전송이 끝나면 세션을 종료해 통신을 마치고 세션 키도 함께 삭제한다.


Reference
https://star7sss.tistory.com/866
https://brunch.co.kr/@swimjiy/47
https://velog.io/@averycode/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-HTTP%EC%99%80-HTTPS-%EB%8F%99%EC%9E%91-%EA%B3%BC%EC%A0%95
그림으로 배우는 HTTP & Network Basic

profile
공부한 내용들을 정리하는 블로그

0개의 댓글