Post

HTTP vs HTTPS

HTTP vs HTTPS

HTTP(Hypertext Transfer Protocol)와 HTTPS(Hypertext Transfer Protocol Secure)는 모두 인터넷에서 정보를 전송하는 데 사용되는 프로토콜이지만 보안 측면에서 몇 가지 중요한 차이점이 있다.

HTTP

HTTP는 World Wide Web에서의 데이터 통신의 기초이다. OSI 모델의 애플리케이션 계층에서 작동하는 웹 브라우저와 웹 서버가 통신하는 데 사용하는 대표적인 프로토콜이다.

  • 상태 비저장 프로토콜: HTTP는 상태 비저장이다. 즉, 과거 상호 작용에 대한 어떠한 메모리도 유지하지 않는다. 클라이언트에서 서버로의 각 요청은 독립적인 것으로 처리된다.
  • 포트 80: 기본적으로 HTTP는 TCP(전송 제어 프로토콜) 포트 80을 사용한다.
  • 보안 되지 않음: 데이터가 일반 텍스트로 전송되어 제3자가 데이터를 중간에서 가로채서 읽을 수 있다.
  • 성능: HTTP는 암호화 오버헤드가 없으므로 HTTPS보다 더 빠를 수 있다.
  • 요청/응답: HTTP는 클라이언트-서버 컴퓨팅 모델에서 요청-응답 프로토콜로 작동한다.

HTTPS

HTTPS는 기본적으로 보안 연결을 통한 HTTP이다. TLS(전송 계층 보안) 또는 이전에는 SSL(보안 소켓 계층)을 사용하여 추가 보안 계층을 통합한다.

  • 암호화: HTTPS는 교환된 데이터를 암호화하여 도청으로부터 보호한다. 이는 데이터가 가로채더라도 가로채는 사람이 이를 이해할 수 없음을 의미한다.
  • 포트 443: 기본적으로 HTTPS는 TCP 포트 443을 사용한다.
  • 인증서: HTTPS 보안 일부에는 클라이언트가 연결할 때 서버가 통신 가능한 서버인지 확인하는 SSL/TLS 인증서 사용이 포함된다. 이 인증서는 CA(인증 기관)에서 발급된다.
  • 보안 표시기: 대부분 브라우저에서 HTTPS는 URL 표시 줄에 자물쇠 기호로 표시된다. 이는 연결이 안전하며 신용카드 정보 등 개인정보를 입력해도 안전하다는 의미이다.
  • 데이터 무결성: HTTPS는 암호화 외에도 데이터 무결성을 보장합니다. 즉, 전송 중에 데이터가 변조될 수 없다.

SSL/TLS

SSL(Secure Sockets Layer) 및 TLS(Transport Layer Security)는 컴퓨터 네트워크를 통해 통신 보안을 제공하도록 설계된 암호화 프로토콜이다. 웹사이트와 사용자 브라우저 간의 웹 트래픽을 보호하는 데 사용되는 것으로 가장 널리 알려졌다.

SSL

  • 목적: 원래 Netscape에서 개발된 SSL의 주요 목적은 웹 서버와 브라우저 간의 트랜잭션을 보호하는 것이었다.
  • 암호화: 응용 프로그램 계층에서 네트워크 연결 세그먼트를 암호화하여 전송 계층에서 안전한 종단 간 전송을 보장한다.
  • 버전: SSL에는 여러 버전이 있었지만 여러 보안 문제 때문에 SSL 3.0은 더는 사용되지 않는다.

TLS

  • SSL을 통한 개선: TLS는 SSL의 향상된 버전이다. SSL과 거의 동일한 방식으로 작동하며 암호화를 사용하여 데이터 및 정보 전송을 보호한다.
  • 버전: TLS에는 TLS 1.0, 1.1, 1.2 및 최신 TLS 1.3을 포함한 여러 버전이 있으며 각 후속 버전에는 개선 사항이 추가되고 안전하지 않은 기능이 더는 사용되지 않는다.
  • 광범위한 사용: TLS는 인터넷상의 보안 통신에 사용되는 HTTPS의 기반이 되고 보안을 유지하는 보안 프로토콜이다.

SSL/TLS 핸드셰이크❗️

SSL/TLS 핸드셰이크는 클라이언트와 서버 간에 보안 통신 세션을 설정하는 프로세스로 관련된 단계는 아래와 같다.

  • CLIENT HELLO: 클라이언트는 다음을 포함하는 Client Hello 메시지를 보낸다.
    • SSL 프로토콜 버전: 클라이언트가 지원하는 가장 높은 SSL/TLS 버전
    • 세션 ID: SSL/TLS 세션의 식별자
    • 암호화 제품군 목록: 클라이언트가 지원하는 암호화 옵션
  • SERVER HELLO: 서버는 다음을 포함하는 Server Hello 메시지로 응답한다.
    • SSL 프로토콜 버전: 클라이언트 목록에서 선택한 프로토콜 버전
    • 세션 ID: 세션 식별자를 확인
    • 선택된 암호: 클라이언트 목록에서 서버가 선택한 암호 제품군
    • 서버 인증서: 공개 키가 포함된 서버의 디지털 인증서
  • 인증: 클라이언트가 서버의 SSL 인증서를 인증서 발행 기관을 통해 검증한다. 이를 통해 서버가 인증서에 명시된 서버인지, 그리고 클라이언트가 상호작용 중인 서버가 실제 해당 도메인의 소유자인지를 확인한다.
  • 예비 마스터 암호: 클라이언트가 "예비 마스터 암호"라고 하는 무작위 바이트 문자열을 하나 더 전송한다. 예비 마스터 암호는 서버의 공개 키로 암호화되어 있으며, 서버가 개인 키로만 해독할 수 있다. (클라이언트는 서버의 SSL 인증서를 통해 공개 키를 받음)
  • 개인 키 사용: 서버가 개인 키를 이용해 예비 마스터 암호를 해독한다.
  • 세션 키 생성: 클라이언트와 서버 모두 예비 마스터 암호를 이용해 세션 키(대칭 암호화)를 생성한다.
  • 클라이언트 준비 완료: 클라이언트가 세션 키로 암호화된 "완료" 메시지를 전송한다.
  • 서버 준비 완료: 서버가 세션 키로 암호화된 "완료" 메시지를 전송한다.
  • 안전한 대칭 암호화 성공: 핸드셰이크가 완료되고, 세션 키를 이용해 통신이 계속 진행된다.

handshake

This post is licensed under CC BY 4.0 by the author.