서버 인증서는 어디에 등록하고 클라이언트는 무엇을 신뢰하는가
TOC
Overview
공인 CA와 사설 CA에서 서버 인증서를 발급받는 과정은 다를 수 있다.
하지만 발급받은 서버 인증서를 HTTPS 서버에 등록하는 과정은 기본적으로 같다.
차이는 클라이언트가 해당 서버 인증서를 신뢰하기 위해 추가 설정이 필요한지 여부다.
서버 인증서는 어떻게 발급되는가
서버 운영자는 서버의 공개키와 도메인 정보를 CA에 제출하고, CA는 이를 확인한 뒤 서버 인증서를 발급한다.
서버 개인키는 서버 운영자가 직접 생성하고 보관한다. CA가 서버 개인키를 대신 발급하는 것은 아니다.
서버 운영자
├─ 서버 개인키 생성·보관
└─ 공개키와 도메인 정보를 CA에 제출
↓
CA가 서버 인증서 발급
서버 인증서와 함께 Intermediate CA 인증서를 제공받는 경우도 있다. Intermediate CA 인증서는 클라이언트가 인증서 발급 경로를 확인할 수 있도록 서버가 함께 전달하는 인증서다.
Root CA 인증서
↓ 서명
Intermediate CA 인증서
↓ 서명
서버 인증서
서버에는 무엇을 등록하는가
공인 CA와 사설 CA 중 어디에서 발급받았는지와 관계없이, HTTPS 서버에는 다음을 등록한다.
HTTPS 서버
├─ 서버 인증서
├─ 서버 개인키
└─ 필요한 Intermediate CA 인증서
서버 인증서는 서버의 신원을 나타내고, 서버 개인키는 해당 인증서의 공개키에 대응하는 비밀키다.
Intermediate CA 인증서는 클라이언트가 서버 인증서에서 신뢰할 CA까지 인증 경로를 구성할 수 있도록 서버가 전달한다.
Root CA 인증서는 일반적으로 서버가 전달하지 않는다. 클라이언트가 신뢰 저장소에 미리 보유하는 인증서이기 때문이다.
공인 CA와 사설 CA의 차이
서버에 인증서를 등록하는 과정은 같지만, 클라이언트가 CA를 신뢰하는 방식은 다르다.
공인 CA
공인 CA의 Root CA 인증서는 주요 운영체제와 브라우저의 신뢰 저장소에 미리 포함되어 있다.
공인 CA
↓ 서버 인증서 발급
HTTPS 서버
↓ 서버 인증서와 Intermediate 인증서 전달
클라이언트
↓ 이미 보유한 공인 Root CA로 검증
HTTPS 연결
클라이언트가 공인 Root CA를 이미 신뢰하고 서버가 필요한 Intermediate 인증서를 전달한다면, Root CA를 별도로 등록하지 않아도 된다.
사설 CA
사설 CA의 Root CA 인증서는 운영체제와 브라우저가 기본적으로 신뢰하지 않는다.
사설 Root CA
↓
사설 Intermediate CA
↓
서버 인증서
따라서 사설 CA에서 발급한 서버에 접속하려면 클라이언트의 OS 또는 브라우저 신뢰 저장소에 사설 Root CA 인증서를 추가해야 한다.
서버
├─ 서버 인증서
├─ 서버 개인키
└─ Intermediate CA 인증서
클라이언트
└─ 사설 Root CA 인증서 등록
이 설정은 서버에 접속하기 전에 완료되어야 한다. 클라이언트는 서버가 전달한 서버 인증서와 Intermediate 인증서를 확인한 뒤, 자신이 신뢰하도록 등록한 사설 Root CA까지 인증 경로가 연결되는지 검증한다.
Java 애플리케이션은 OS 신뢰 저장소가 아니라 JVM truststore를 사용할 수 있다. 따라서 JVM에서 사설 서버에 접속할 때는 사설 Root CA 인증서를 JVM 또는 애플리케이션이 사용하는 truststore에 추가해야 할 수 있다.
정리
공인 CA와 사설 CA에서 발급받은 서버 인증서를 서버에 등록하는 과정은 기본적으로 같다.
서버
├─ 서버 인증서
├─ 서버 개인키
└─ Intermediate CA 인증서
차이는 클라이언트의 사전 설정이다.
공인 CA
└─ 공인 Root CA가 이미 신뢰되는 경우가 많음
사설 CA
└─ 사설 Root CA를 클라이언트 신뢰 저장소에 추가해야 함
즉, 사설 인증서를 사용할 때는 서버에 서버 인증서를 등록하는 작업과 별개로, 서버에 접속할 클라이언트가 사설 Root CA를 신뢰하도록 설정해야 한다.
다음 글에서는 사설 Root CA 인증서를 JVM이 사용할 수 있도록 truststore에 등록하는 방법을 다룬다.