SSL 인증서는 서버 인증서 > 중간 인증서 > 루트 인증서 순으로 이어지는 연결 고리를 가지고 있는데 이를 인증서 체인이라고 한다. SSL 통신 과정에서 인증서 체인이 정상적으로 확인되어야 최종적으로 문제 없이 암호화 통신을 할 수 있다.
무슨 말인지 전혀 이해가 안 될 수도 있으니 바로 네이버에 적용된 SSL 인증서 체인 예시를 보자. 웹 브라우저에선 사이트에 적용된 SSL 인증서를 모두 볼 수 있다.
이렇게 트리 구조로 확인 된다. 네이버의 경우엔 *.www.naver.com > DigiCert TLS RSA SHA256 2020 CA1 > DigiCert Global Root CA 순으로 인증서 체인이 연결되어 있는 걸 알 수 있다.
구분해서 보면 이렇다.
- *.www.naver.com : 서버 인증서
- DigiCert TLS RSA SHA256 2020 CA1 : 중간 인증서(체인 인증서)
- DigiCert Global Root CA : 루트 인증서
SSL 인증서 체인은 어떻게 검증되나?
서버-클라이언트 구조에서 각 인증서가 어느 위치에 있어야 SSL 통신이 가능한지를 알 필요가 있다.
서버 인증서와 중간 인증서는 서버에 설치되어야 하고 루트 인증서는 클라이언트에 설치되어 있어야 한다. 이때 SSL 통신 과정은 대략 이렇다.
SSL 통신을 시도하며 서버는 클라이언트에 중간 인증서를 제공한다.
클라이언트는 중간 인증서에 서명된 상위 인증서를 찾아간다.
결국 최상단에 있는 루트 인증서까지 확인되면 이 서버의 SSL 인증서가 안전하다는 걸 확인하며 통신이 이루어진다.
1. 서버 인증서
서버 인증서는 특정 도메인에 대한 인증서다. 이 인증서는 서버에 설치되어야 한다.
2. 중간 인증서
중간 인증서는 체인 인증서라고도 부르는데 서버 인증서와 루트 인증서 사이를 이어주는 인증서 역할이다. 서버에 설치되어야 한다.
중간 인증서는 한 개가 될 수도 있고 두 개가 될 수도 있고 여러 개가 될 수 도 있긴한데 일단 이 개념은 큰 틀에서 중요한 건 아니기 때문에 넘어간다.
3. 루트 인증서
루트 인증서는 인증서 체인에서 최상위에 있는 인증서다. 클라이언트에 설치되어야 한다. 그래서 OS나 브라우저에 여러 루트 인증서가 내장되어 있다.
CA에 의해 서명된 공인 인증서를 쓰면 딱히 루트 인증서를 신경쓸 일이 없지만 자체 서명한 사설 인증서를 쓰면 루트 인증서를 클라이언트에 설치해줘야 한다.