..
사설인증서 동작원리 quick start
TOC
Overview
사설 인증서는 내부 환경에서 쓸 신뢰 기준을 직접 만드는 방식이다.
공인 인증서는 브라우저와 OS가 이미 신뢰하는 CA에서 시작한다. 사설 인증서는 먼저 내가 만든 CA를 클라이언트 trust store에 등록해야 시작된다.
이 등록은 접속 중에 하는 작업이 아니다. HTTPS 연결 전에 끝내야 한다.
사설 인증서와 공인 인증서의 차이
공인 인증서는 이미 신뢰된 CA를 기준으로 검증한다.
사설 인증서는 다음 순서로 동작한다.
- 사설 CA가 서버 인증서를 발급한다.
- 서버는 인증서와 개인키를 보관한다.
- 클라이언트나 OS에 사설 CA root 인증서를 trust store에 등록한다.
- 브라우저가 handshake 중 서버 인증서를 검증한다.
즉, 핵심은 인증서 발급보다 신뢰 등록이다.
flowchart LR
A[사설 CA root cert] --> B[서버 인증서 발급]
B --> C[서버]
D[클라이언트 / 브라우저] --> E[trust store에 root cert 등록]
C --> F[HTTPS 연결]
F --> D
D --> G{검증 가능?}
G -->|예| H[연결 계속]
G -->|아니오| I[에러 / 경고]
신뢰는 어디서 시작하나
흐름은 단순하다.
- 사설 CA가 서버 인증서를 발급한다.
- 클라이언트 또는 OS에 사설 CA root 인증서를 등록한다.
- 브라우저가 서버 인증서를 검증한다.
2번은 연결 전에 끝나야 한다. 3번은 실제 HTTPS handshake에서 일어난다.
브라우저는 항상 같은 trust store를 쓰지 않는다. OS trust store를 쓰는 경우도 있고, 브라우저 자체 trust store를 쓰는 경우도 있다. 그래서 문서에서는 “Client OS / Browser trust store”처럼 넓게 적는 편이 안전하다.
자주 발생하는 문제
가장 흔한 문제는 다음과 같다.
- 사설 CA를 클라이언트에 등록하지 않음
- 호스트명이 인증서와 다름
- 인증서 만료
- 브라우저마다 trust store가 달라 동작이 다름
사설 인증서는 한 번 만들고 끝나는 구성이 아니다. 배포와 갱신까지 같이 봐야 한다.
Conclusion
한 줄로 정리하면, 사설 인증서는 내가 만든 CA를 먼저 신뢰하게 만들고 그 기준으로 내부 서버를 검증하는 방식이다.
핵심은 두 가지다.
- 사설 CA root 인증서를 클라이언트 trust store에 먼저 등록한다.
- 브라우저는 handshake 중 그 신뢰 기준으로 서버 인증서를 검증한다.