ABOUT ME

-

My Email
  • kdmin0211@gmail.com
  • Today
    -
    Yesterday
    -
    Total
    -

    • Certificate Chain
      Network 2022. 2. 6. 18:32

      HTTPS (Hyper Text Transfer Protocol Secure socket layer)

      요약하여 http message 의 암호화를 적용한 프로토콜입니다.

      즉, http 프로토콜에서 TLS 인증서가 포함된 통신 규약입니다.

      💡 TLS / SSL
      SSL 3.0 부터 IETF(Internet Engineering Task Force) 에서 표준으로 TLS 1.0 으로 지정한 것으로 동일한 용어입니다.

      암호화

      • 대칭키
        • 암호화 복호화가 같은 키를 사용하는 방식
        • 대칭키가 전달중 탈취되면 데이터 도난의 위험성이 존재함
        • AES(고급 암호화의 표준) 가 이 방식을 사용
      • 공개키(비대칭키)
        • 2개의 키로 암호화 복호화
          • A로 암호화 B만 복호화
          • B로 암호화 A만 복호화
        • 한개는 개인만 소장하는 개인키, 다른 키는 공유하는 공개키
        • 공개키 암호화 알고리즘은 대칭키에 비해 상대적으로 느림(CPU 자원의 필요)

      전자 서명

      비대칭키 암호화 메커니즘(대표적으로 RSA 방식)을 기반으로 합니다.

      우선 해시 함수의 종류를 정하고 문서의 내용의 해시 값을 얻습니다. 발신자는 해당 해시값을 자신의 비밀키로 암호화하여 기존 문서 끝에 첨부하여 공개키를 가지고 있는 수신자에게 보냅니다.

      수신자는 전달받은 메세지의 기존 문서를 우선 해시함수를 사용하여 해시값을 얻습니다. 그후 암호화된 해시값을 발신자의 공개키를 가지고 복호화합니다. 두 해시값을 비교하여 같으면 올바른 서명이며 다른 경우 위조된 서명입니다.

      TLS handshake 의 역할

      사용자가 HTTPS 로 웹 사이트에 접근하면 기본적으로 HTTP 프로토콜 연결을 위한 3 way handshake 과정이 이루어집니다. 다음으로 인증을 위한 TLS handshake 과정이 실행됩니다.

      TLS handshake 는 통신 과정에서 사용할 대칭키를 안전하게 전달하기 위한 과정으로 다양한 인증 과정이 필요합니다. 이 과정에서 “server hello” 라는 서버의 TLS 인증서를 보내고 클라이언트는 해당 인증서를 검증하는 과정이 존재합니다. 이때 서버가 보내는 인증서는 서버 인증서만이 아닌 인증서 체인을 보내게 됩니다.

      해당 문서에서는 인증서 체인 과 인증서 유효성 검증 에 대해서 알아보겠습니다.

      인증서 체인

      공개키 인프라(PKI)에서 TLS 인증서는 기본적으로 신뢰 체인으로 불리는 모델을 기반으로 이루어집니다.

      신뢰 체인은 CA에서 발급한 루트 인증서(Root Certificate)부터 하나 이상의 중간 인증서(Intermediate Certificate) 및 서버 인증서(Leaf Certificate)로 구성되어 있습니다.

      개발자가 구매하는 SSL 인증서는 보통 서버 인증서를 의미합니다.

      왜 신뢰 체인 모델로 작동하는가?
      이러한 신뢰 체인 모델은 CA 에 대해서 보안, 확장성을 보장할 수 있습니다. 이러한 CA 의 보안 및 확장성은 서버 인증서를 사용하는 웹 사이트 운영자, 웹 사이트 사용자의 개인 정보 보호, 신뢰 및 보안도 보장합니다.

      루트 인증서

      X.509 형식의 자체 서명된 인증서로 신뢰 체인 모델의 핵심으로 엄격하게 관리되며 중간 인증서를 발급하는데 사용할 수 있습니다.

      해당 루트 인증서로 서명된 인증서는 웹 브라우저가 전부 신뢰하기 때문에 엄격히 관리되어야 합니다.

      그렇기 때문에 루트 인증서는 전송을 통해 관리하기 적절하지 않으므로 웹 브라우저에 루트 인증서가 미리 설치된 것처럼 대부분의 장치는 루트 저장소에서 루트 인증서가 관리됩니다.

      💡 루트 저장소?
      루트 저장소는 다운로드 된 루트 인증서와 공개 키의 모음으로 이루어집니다. 각 장치들의 운영체제는 루트 저장소를 내장하고 있으며 웹 브라우저 역시 루트 저장소를 관리합니다.

      중간 인증서

      서버 인증서와 루트 인증서의 중개자 역할을 합니다.

      루트 인증서의 손상은 루트 인증서부터 신뢰를 얻는 모든 인증서가 재발급되어야 하는 상황이 생기므로 중간 인증서를 사용하여 최종 사용자에게 서버 인증서를 발급하는 방식으로 보안 수준을 높입니다.

      작동 방식

      1. 루트 CA 는 개인키로 중간 CA 의 중간 인증서에 서명합니다.
      2. 루트 CA 의 서명으로 중간 인증서는 신뢰할 수 있는 인증서가 됐습니다.
      3. 해당 중간 CA 는 중간 인증서로 다른 중간 CA 의 인증서 혹은 최종 서버 인증서에 서명할 수 있습니다.

      이점

      이 방식으로 최종 사용자가 TLS 인증서를 발급받는 과정에서 루트 CA 의 역할을 분산할 수 있습니다. 즉 루트 CA 는 오프라인 상태로 중간 CA 의 인증서 발급을 위해서만 사용됩니다.

      루트 CA 의 사용이 분산된 것은 루트 CA 의 오류 발생 확률이 현저히 적어진 것으로 만약 중간 CA 인증서의 문제가 발생한 경우 해당 중간 CA 부터 시작하는 분기의 인증서만 재발급하면 됩니다.

      실제로 위 사진과 같이 왼쪽 루트 인증서는 발급 기관과 대상이 같지만 오른쪽 중간 인증서는 다릅니다.

      서버 인증서

      End Entity Certificate 로 평소에 TLS/SSL 인증서로 불리는 인증서입니다.

      서버와 사용자 간의 민감한 통신을 보호/암호화할 수 있도록 서버에 설치하는 암호화된 데이터가 포함된 텍스트 파일입니다.

      중간 CA 의 개인키로 암호화됩니다.

      중간 CA vs 루트 CA

      공개키 인프라(PKI) 에서 모든 인증서는 CA 에서 발급합니다.

      이때 CA 는 하는 역할로 중간 CA 와 루트 CA 로 나뉩니다.

      루트 CA 는 이름 그대로 신뢰 체인 모델의 루트의 CA 모든 인증서에서 역추적 될 수 있습니다. 또한 루트 인증서를 보호하기 위해 중간 인증서를 발급할 때 루트 CA 의 비밀키가 사용됩니다. 하지만 루트 CA 는 서버 인증서를 발급하는 과정에서 어떠한 역할도 하지 않습니다.

      중간 CA 는 루트 CA 에서 발급한 인증서를 가지고 있으며 서버 인증서를 서명하는데 사용합니다. 해당 방식으로 루트 CA 가 서명한 인증서를 통해 서명된 서버 인증서가 클라이언트에게 전달되며 신뢰 체인이 형성될 수 있습니다.

      인증서 유효성 검사 프로세스

      • 브라우저가 홈페이지에 접근하여 인증서 체인을 다운받습니다.
      • 브라우저는 다운받은 인증서 체인에 따라 역추적을 시작합니다.
      • 인증서 체인과정(역추적)은 브라우저가 신뢰할 수 있는 기관(루트 CA) 목록의 인증서를 확인할때까지 계속됩니다.
      • 만약 TLS 인증서의 루트 인증서까지 도달했지만 브라우저가 신뢰할 수 있는 기관의 인증서가 아닌경우 브라우저는 신뢰할 수 없다고 경고합니다.

      TLS 전체 프로세스

      마지막으로 웹 서버의 인증서 구성부터 클라이언트에서 인증서 검증까지 프로세스를 간단히 알아보겠습니다.

      • 서버는 개인키와 공개키를 생성합니다.
      • 서버는 서버의 공개키와 서버의 정보를 포함한 CSR(인증서 서명 요청)을 생성합니다.
      • CSR 를 통해 중간 CA 에 TLS 인증서 발급을 요청합니다.
      • 중간 CA 는 CSR 에 대한 검증이 끝나면 서버의 공개키를 해시하고 CA 개인키로 서명한 서버 인증서를 구성합니다.
      • 웹 서버는 중간 CA 에서 구성된 서버 인증서를 설치하고 인증서의 신뢰도 보장을 위해 중간 CA 의 중간 인증서까지 설치합니다.
      • 클라이언트가 서버와 연결을 시도하고 TLS handshake 과정이 시작합니다.
      • TLS handshake 과정 중 서버는 클라이언트에게 인증서 체인을 전송합니다.
      • 인증서 체인을 전송받은 클라이언트는 루트 저장소에 저장된 신뢰할 수 있는 CA 의 인증서인지 유효성 검사를 시작합니다.
      • 서버로부터 받은 인증서 체인의 루트 인증서가 신뢰할 수 있는 CA 의 인증서로 검증되면 유효성 검사가 종료됩니다.

      여기까지 과정이 해당 글에 서술된 내용으로 인증서 무결성 검사와 같은 다른 내용은 다른 포스트에서 정리하겠습니다.

      참고자료

      TLS handshake

      Root 인증서

      CA, 인증서 체인

      인증서 체인 과정 예시

      인증서 체인 과정

      루트 인증서 / 중간 인증서

      루트 CA / 중간 CA

      중간 인증서

      'Network' 카테고리의 다른 글

      TLS handshake  (0) 2022.02.06
      로드밸런싱  (0) 2021.12.22
      양방향 통신(polling, long polling, websocket)  (0) 2021.10.23

      댓글

    Designed by Tistory.