본문 바로가기
IT/security

#9 공개키를 믿을 수 있을까?

by 내일은교양왕 2025. 5. 10.

프롤로그

이번 장은 이 공개키를 믿을 수 있을까? 라는 의심에 대한 답을 주는 시스템인 PKI(Public Key Infrastructure)와 인증서 체계를 외우기 쉽게 구성했습니다. 

 

비대칭키의 가장 큰 문제

신원 확인 앞에서 봤듯이, 비대칭키 자체는 암호화는 잘하지만 "이 공개키가 진짜 누구 건지"는 알려주지 못합니다.

💥 그래서 등장한 것이 바로 → 공개키를 보증해주는 시스템 = 인증서 체계 

 

인증서란?

인증서(Certificate)는 이런 정보를 담은 문서입니다.

  • 이 공개키는 누구의 것인지 (신원 정보)
  • 언제부터 언제까지 유효한지
  • 누가 이걸 보증했는지 (디지털 서명 포함)

즉, 이 공개키는 진짜 아무개씨 것이며, 내가 보증합니다 라고 제3자(CA)가 도장 찍은 문서 

 

인증서는 누가 만들까?

CA (Certificate Authority) : 인증서를 발급하는 공신력 있는 기관 예시

CA 설명
DigiCert 글로벌 인증서 발급기관
Let's Encrypt  무료 공개 인증서 제공
한국정보인증 국내 주요 인증기관 중 하나

📌 CA는 개인/기업의 신원을 확인하고, 그들의 공개키에 서명된 인증서를 발급함 

 

인증서 안에 뭐가 있을까? 

인증서의 구성요소

  • 도메인 이름 또는 사용자 이름
  • 공개키
  • 유효 기간
  • 발급한 CA의 이름
  • CA의 디지털 서명

인증서 = 공개키 + 신원 정보 + 디지털 보증 

 

브라우저는 어떻게 인증서를 검증할까?

  • 서버에서 인증서 전달
  • 브라우저는 내장된 루트 CA 목록으로 인증서의 서명을 검증
  • 서명이 유효하면 → 공개키를 신뢰하고 사용
  • 아니면 → “안전하지 않음” 경고 

 

인증서 검증 흐름 요약

  1. 브라우저가 서버에 접속 요청 사용자가 `https://example.com` 입력하면: → 브라우저가 해당 웹 서버에 “접속 요청(Hello)”을 보냄. 
  2. 서버는 자신의 SSL/TLS 인증서를 브라우저에게 보냄. 이 인증서에는 다음 정보가 포함됨
    1. 서버의 공개키
    2. 도메인 이름
    3. 만료일
    4. 발급한 CA 이름
    5. CA의 디지털 서명
  3. 브라우저가 인증서 검증 브라우저는 OS나 브라우저에 내장된 신뢰된 루트 인증서 목록을 이용해 다음을 검증
    1. 서명 확인: CA의 공개키로 서명 복호화 → 인증서 내용 해시값과 비교
    2. 도메인 일치 여부: example.com과 인증서의 CN/SubjectAltName 일치 확인
    3. 유효 기간: 현재 시간이 인증서 유효 범위 내인지 확인
    4. 체인 검증: 인증서 체인이 루트 CA까지 이어지는지 확인
      1. ✅ 검증 성공 → 통신 계속
      2. ❌ 실패 시 → 브라우저가 보안 경고 띄움
  4. 대칭키 교환 준비 (TLS Handshake)
    1. 브라우저는 임시 대칭키(세션 키)를 생성
    2. 이 키를 서버의 공개키로 암호화해서 서버에 보냄
    3. 서버는 자신의 개인키로 복호화하여 세션 키 획득
  5. 안전한 HTTPS 통신 시작 이후부터는 두 쪽 모두 같은 대칭키를 갖고 있기 때문에
    1. 빠르고 효율적인 대칭키 암호화 방식으로 통신 진행
    2. 데이터가 도청되거나 위조되는 것을 방지함 

 

특징

① 인증서 종류

종류 설명
DV (Domain Validation) 도메인 소유 확인만 함 (가장 보편적) 
OV (Organization Validation)  기업 정보를 추가로 인증
EV (Extended Validation)  법적 인증까지 포함 (주소창에 회사 이름 표시됨) 

 

 

② PKI(Public Key Infrastructure)란?

공개키를 신뢰할 수 있게 관리하는 시스템 전체 인증서 발급(CA) 인증서 검증 폐기 관리(CRL, OCSP) 브라우저/운영체제의 신뢰 루트 관리  비대칭키 체계를 실전에 도입 가능하게 만든 구조 

 

요약

  • 공개키 자체는 신뢰할 수 없음
  • 인증서는 공개키에 CA의 서명이 붙은 신원 증명서
  • 브라우저는 인증서를 CA 루트를 기준으로 검증
  • PKI는 공개키 신뢰를 가능하게 해주는 전체 구조
  • 인증서 없으면 HTTPS도, 디지털 서명도 못 씀