인증서 체인

정미·2024년 8월 29일

개념

CA 인증서와 SSL/TLS 인증서를 포함하는 정렬된 인증서 목록

구조

1. 루트 인증서

  • CA 인증서
  • 중간 인증서의 발급자/서명자
  • 인증서 체인의 끝
  • 모든 루트 인증서는 항상 CA 본인의 공개키로 자체 서명(Self-Signed)한다.

2. 중간 인증서

  • = 체인 인증서
  • SSL 인증서와 루트 인증서 사이에 있는 모든 인증서
    - 루트 인증서와 서버 인증서를 중개, 연결해준다.
  • SSL 인증서의 발급자/서명자
  • SSL 인증서가 설치된 서버에 중간 인증서가 설치되지 않은 경우 일부 브라우저, 모바일 기기, 애플리케이션 등에서 SSL/TLS 인증서를 신뢰하지 못할 수 있다.
    - SSL 인증서가 모든 클라이언트와 호환되게 하려면 중간 인증서를 설치해야 한다.

3. 리프 인증서

  • = SSL/TLS 인증서, 서버 인증서
  • 신청자에게 발급된 최종 인증서
  • HTTPS 서비스를 위해 각 서버에 설치된다
  • 유효 기간: 1년

서명 Signature

  1. Hash된 인증서 정보를 상위 인증서 서버 개인키로 암호화
  2. 상위 인증서 서버 공개키로 복호화
  3. 상위 인증서가 본인의 서버 개인키로 암호화해줌을 확인
  4. Hash 값 비교하여 인증서의 무결성 확인

특징

  • SSL/TLS 인증서부터 시작되어 인증서가 계층으로 연결되어 있다.
  • 각 인증서는 트리 구조를 이루며 체인의 다음 인증서에 의해 서명된다.
  • 인증서를 서명한 기관/사람을 신뢰한다면, 서명된 인증서도 신뢰할 수 있다.
  • 유명한 인증 기관의 루트 CA 인증서 및 일부 중간 인증서는 브라우저 및 OS 등의 저장소에 기본적으로 내장되어있다.
    - 필요 시 import하여 추가 가능하다.
    - 자바 JDK 내 trust store 예시: /java_home/lib/security/cacerts
  • 루트 인증서를 클라이언트 인증서 저장소에 등록하면, 이 루트 인증서를 통해 서명된 모든 중간 인증서와 서버 인증서를 신뢰할 수 있게 된다.

인증 과정

  1. 클라이언트는 https 요청을 전송한다.
  2. 서버는 공개키를 포함한 인증서 체인(루트 인증서 + 중간 인증서 + 서버 인증서)을 전달한다.
  3. 브라우저의 신뢰하는 루트 인증서 리스트와 서버로부터 전달받은 루트 인증서를 비교하여 신뢰하는 루트 인증서인지 확인한다.
  4. 루트 인증서는 본인의 공개키로 self 서명을 복호화하여 self 서명 확인과 무결성 검증한다.
  5. 중간 인증서는 루트 인증서 공개키로 서명을 복호화하여 서명 확인과 무결성 검증한다.
  6. 리프 인증서는 중간 인증서 공개키로 서명을 복호화하여 서명 확인과 무결성을 검증한다.
  7. 신뢰된 인증서임을 확인한다.

체인 인증서 설정

  • SSL 인증 경로에서 체인 인증서는 클라이언트(웹브라우저 등)에 존재하지 않기 때문에, 웹서버에서 명시적으로 클라이언트에 체인 인증서를 전송해주어야 한다.
  • 체인 인증서를 전송해주지 않으면 인증서 관련 경고창이 발생하거나 서버 접속을 하지 못함.
    - 중간 체인 정보가 없으면 클라이언트는 인증서의 발급자를 확인하지 못하기 때문.

출처

0개의 댓글