본문 바로가기

개발자 강화/백엔드

[매일메일] HTTPS란? (BE. 250127)

HTTP(Hypertext Transfer Protocol)

웹 브라우저(클라이언트)와 웹 서버 간에 데이터 주고받기 위한 통신 프로토콜.

암호화되지 않은 평문 데이터를 전송해 제 3자가 정보를 조회할 수 있음. (보안 취약)

네트워크 패킷 가로채서 로그인 정보, 개인 데이터 유출하는 중간자 공격(Man-in-the-Middle-Attack) 위험 존재.

 

HTTPS(Hypertext Transfer Protocol Secure)

HTTP에 보안 기능(SSL/TLS 암호화)이 추가된 프로토콜.

암호화된 데이터를 전송해 제 3자가 정보를 조회할 수 없음.

인증서(Certificate)를 통해 서버가 신뢰할 수 있는 기관(CA, Certificate Authority)에 의해 인증되었음을 보장함.

인증서를 통해 서버가 신뢰할 수 있는 서버인지 검증할 수 있음.

 


 

HTTPS 적용 방법?

인증된 기관(Certificate Authority, CA)에 인증서를 발급받는다.

  • 인증서 발급 요청
    • 서버 소유자는 신뢰할 수 있는 인증기관(CA)에 인증서를 요청함
    • 서버의 도메인, 서버의 공개키(Public Key), 기타 정보(조직 이름, 주소 등 서버와 소유자 정보 포함)
  • 인증서 발급
    • CA는 서버에서 요청한 정보를 확인한 후 서버 인증서를 발급함
    • 인증서에는 서버 도메인, 서버 공개키, CA의 서명(CA의 발급 증명)를 포함함
    • CA는 이 정보를 CA의 개인키(Private Key)로 서명해 인증서의 신뢰성 보장함
  • 인증서 설치
    • 발급받은 인증서를 웹 서버에 설치함
    • 클라이언트가 서버에 접속하면 인증서를 전달해 클라이언트가 서버를 검증할 수 있도록 함
  • HTTPS 프로토콜 활성화
    • 서버에서 HTTPS 활성화하고, HTTP 요청을 HTTPS로 리디렉션하도록 설정함
    • 이 과정에서 443번 포트를 사용해 HTTPS 트래픽을 처리함

[출처] Cloudflare. TLS 핸드셰이크의 원리는 무엇일까요? ❘ SSL 핸드셰이크.

 

HTTPS 동작 원리? (TLS 핸드 쉐이크)

  • 클라이언트가 서버에 접속 요청(ClientHello)
    • 클라이언트(브라우저)는 서버에 HTTPS 접속 요청을 보냄
    • [지원하는 암호화 알고리즘 목록(Cipher Suites)+프로토콜 버전(TLS 1.2)+무작위 값]을 포함
  • 서버의 응답(ServerHello)
    • 서버는 클라이언트의 요청을 받고 정보를 응답함
    • [서버에서 선택된 암호화 알고리즘+서버 SSL 인증서+무작위 값]을 포함
  • 클라이언트가 서버 인증서 검증
    • 클라이언트가 서버 SSL 인증서를 인증서 발행 기관을 통해 검증함.
    • CA 공개키는 브라우저 또는 OS에 사전에 설치된 신뢰 목록에 포함되어 있음.
  • 클라이언트가 Pre-Master Secret 생성해 서버로 전송
    • 클라이언트는 Pre-Master Secret라는 임시 비밀 데이터를 생성함
    • 데이터를 서버의 공개키로 암호화해 서버로 전송함.
  • 서버와 클라이언트에서 Master Secret 생성
    • 서버는 개인키를 사용해 클라이언트로 받은 Pre-Master Secret을 복호화 함
    • 클라이언트와 서버는 각각 [클라이언트 무작위 값+서버 무작위 값+Pre-Master Secret]으로 Master Secret 생성
  • 서버와 클라이언트에서 Master Secret으로 대칭 암호화를 위해 Session Key를 생성함
  • 클라이언트가 세션키로 암호화된 완료 메시지를 전송함
  • 서버가 세션키로 암호화된 완료 메시지를 전송함
  • 데이터 암호화 및 전송
    • Session Key가 생성되면, 이후 데이터 통신은 대칭키 암호화로 암호화 함.(암호화/복호화에 동일한 키 사용)
    • 클라이언트-서버 간 데이터 안전하게 보호함.

HTTPS 보안 핵심 요소

- 기밀성(Confidentiality): 데이터가 암호화되어 도청이 불가능

- 무결성(Integrity): 데이터가 전송 중에 변경되지 않음을 보장

- 인증(Authentication): 클라이언트가 서버의 신뢰성을 검증

 

HTTPS의 장점

- SEO 우선 순위: Google 등의 검색 엔진은 HTTPS 사이트 더 선호

- 브라우저 호환성: HTTPS가 활성화되지 않으면 안전하지 않음 경고 표시

- 신뢰 구축: 사용자의 신뢰 형

 


Diffie-Hellman 핸드셰이크

  • 클라이언트 헬로: [프로토콜 버전+무작위 값+암호 알고리즘 목록] 서버로 전송
  • 서버 헬로: [SSL 인증서+선택한 암호화 알고리즘+무작위 값] 클라이언트로 전송
  • 서버의 디지털 서명: 이 시점까지 모든 메시지에 대한 디지털 서명 계산
  • 디지털 서명 확인: 클라이언트는 서버의 디지털 서명을 확인해 신원 확인.
  • 클라이언트 DH 매개변수: 클라이언트가 DH 매개변수를 서버로 전송함
  • 클라이언트와 서버가 Pre-Master Secret 계산: 클라이언트와 서버가 서로 교환한 DH 매개변수를 사용해 암호화 계산
  • 세션 키: 클라이언트와 서버가 Pre-Master Secret+클라이언트 무작위 값+서버 무작위 값으로 세션 키 계싼
  • 클라이언트 준비 완료
  • 서버 준비 완료
  • 안전한 대칭 암호화 성공

TLS 1.3 핸드셰이크의 차이점

  • TLS 1.0, 1.1, 1,2와 TLS 1.3의 차이점
  • 클라이언트 헬로
    • 가능한 암호화 알고리즘 목록 수가 많이 줄어듦.(안전하지 않은 암호 모음 지원을 TLS 1.3에서 제거)
    • Pre-Master Secret 계산에 사용되는 매개변수 포함
    • 클라이언트는 서버가 선호하는 키 교환 방법을 알고 있다고 가정함
    • 추가된 위 사항으로 핸드셰이크 전체 길이가 많이 줄어듦
  • 서버가 Master Secret 생성: 클라이언트에서 받은 [무작위 값+매개변수+암호 알고리즘 목록]을 사용해 생성함
  • 서버 헬로+완료: 서버는 [인증서+디지털 서명+무작위 값+선택한 암호 알고리즘] 가지고 있고, Master Secret도 보유.
  • 클라이언트 완료: 클라이언트가 서명 및 인증서 확인하고 Master Secret 생성.
  • 안전한 대칭 암호화 성공

이 주제와 관련된 이 블로그의 다른 글: HTTP https://developer-dreamer.tistory.com/101 (2024.12.12.)


출처

[1] 매일메일. 250127. HTTPS에 대해서 설명해주세요. 106번. https://maeil-mail.kr 

[2] gpt에게 HTTPS 동작 원리에 대해 묻다

[3] Cloudflare 독스. TLS 핸드 셰이크의 원리는 무엇일까요? SSL 핸드셰이크. https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/