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

1. 루트 인증서
- CA 인증서
- 중간 인증서의 발급자/서명자
- 인증서 체인의 끝
- 모든 루트 인증서는 항상 CA 본인의 공개키로 자체 서명(Self-Signed)한다.
2. 중간 인증서
- = 체인 인증서
- SSL 인증서와 루트 인증서 사이에 있는 모든 인증서
- 루트 인증서와 서버 인증서를 중개, 연결해준다.
- SSL 인증서의 발급자/서명자
- SSL 인증서가 설치된 서버에 중간 인증서가 설치되지 않은 경우 일부 브라우저, 모바일 기기, 애플리케이션 등에서 SSL/TLS 인증서를 신뢰하지 못할 수 있다.
- SSL 인증서가 모든 클라이언트와 호환되게 하려면 중간 인증서를 설치해야 한다.
3. 리프 인증서
- = SSL/TLS 인증서, 서버 인증서
- 신청자에게 발급된 최종 인증서
- HTTPS 서비스를 위해 각 서버에 설치된다
- 유효 기간: 1년
서명 Signature
- Hash된 인증서 정보를 상위 인증서 서버 개인키로 암호화
- 상위 인증서 서버 공개키로 복호화
- 상위 인증서가 본인의 서버 개인키로 암호화해줌을 확인
- Hash 값 비교하여 인증서의 무결성 확인
특징
- SSL/TLS 인증서부터 시작되어 인증서가 계층으로 연결되어 있다.
- 각 인증서는 트리 구조를 이루며 체인의 다음 인증서에 의해 서명된다.
- 인증서를 서명한 기관/사람을 신뢰한다면, 서명된 인증서도 신뢰할 수 있다.
- 유명한 인증 기관의 루트 CA 인증서 및 일부 중간 인증서는 브라우저 및 OS 등의 저장소에 기본적으로 내장되어있다.
- 필요 시 import하여 추가 가능하다.
- 자바 JDK 내 trust store 예시: /java_home/lib/security/cacerts
- 루트 인증서를 클라이언트 인증서 저장소에 등록하면, 이 루트 인증서를 통해 서명된 모든 중간 인증서와 서버 인증서를 신뢰할 수 있게 된다.
인증 과정
- 클라이언트는 https 요청을 전송한다.
- 서버는 공개키를 포함한 인증서 체인(루트 인증서 + 중간 인증서 + 서버 인증서)을 전달한다.
- 브라우저의 신뢰하는 루트 인증서 리스트와 서버로부터 전달받은 루트 인증서를 비교하여 신뢰하는 루트 인증서인지 확인한다.
- 루트 인증서는 본인의 공개키로 self 서명을 복호화하여 self 서명 확인과 무결성 검증한다.
- 중간 인증서는 루트 인증서 공개키로 서명을 복호화하여 서명 확인과 무결성 검증한다.
- 리프 인증서는 중간 인증서 공개키로 서명을 복호화하여 서명 확인과 무결성을 검증한다.
- 신뢰된 인증서임을 확인한다.
체인 인증서 설정
- SSL 인증 경로에서 체인 인증서는 클라이언트(웹브라우저 등)에 존재하지 않기 때문에, 웹서버에서 명시적으로 클라이언트에 체인 인증서를 전송해주어야 한다.
- 체인 인증서를 전송해주지 않으면 인증서 관련 경고창이 발생하거나 서버 접속을 하지 못함.
- 중간 체인 정보가 없으면 클라이언트는 인증서의 발급자를 확인하지 못하기 때문.
출처