Develope/Node.js

Node.js에서 신뢰하는 CA 인증서 목록 확인 방법

oper0116 2026. 4. 8. 22:28
반응형

1. 개요

HTTPS 통신에서 서버의 인증서를 검증하기 위해서는
신뢰할 수 있는 인증기관(CA, Certificate Authority) 목록이 필요하다.

Node.js는 기본적으로 자체 CA 목록을 내장하고 있으며,
이 목록을 기반으로 서버 인증서를 검증한다.

이 글에서는 Node.js에서 신뢰하는 CA 목록을 확인하는 방법을 정리한다.


2. CA (Certificate Authority)란?

CA는 서버 인증서를 발급하는 기관이다.

대표적인 CA:

  • DigiCert
  • GlobalSign
  • Let's Encrypt
  • Sectigo

Node.js는 이러한 CA들을 신뢰 목록으로 가지고 있으며,
이 목록에 포함된 기관이 발급한 인증서만 정상적으로 검증된다.


3. Node.js에서 CA 목록 확인하기

Node.js에서는 tls 모듈을 통해
내장된 CA 목록을 확인할 수 있다.

const tls = require("tls");

console.log(tls.rootCertificates);

결과

  • PEM 형식의 인증서 배열이 출력됨
  • 각 항목이 하나의 CA 인증서

4. 실제로 어떤 CA가 포함되어 있는가

출력된 인증서를 확인해보면 다음과 같은 CA들이 포함되어 있다:

  • DigiCert
  • GlobalSign
  • Let's Encrypt
  • Sectigo

이 CA들이 발급한 인증서는 기본적으로 신뢰된다.


5. Node.js 내부 CA 위치

Node.js의 기본 CA 목록은 내부적으로 다음 파일에 포함되어 있다:

https://github.com/nodejs/node/blob/main/src/node_root_certs.h

이 파일에는 PEM 형식의 인증서들이 하드코딩되어 있으며,
Node.js는 이 목록을 기반으로 TLS 인증서를 검증한다.

Node.js는 실행 시 외부에서 CA를 가져오는 것이 아니라,
빌드 시 포함된 CA 목록을 기준으로 인증서를 검증한다.

또한 이 CA 목록은 Mozilla의 NSS 저장소를 기반으로 생성된다.


6. 시스템 CA를 사용하는 경우

Node.js는 옵션에 따라
운영체제의 CA 목록을 사용할 수도 있다.

NODE_OPTIONS=--use-openssl-ca

이 경우:

  • OS의 CA 저장소 사용
  • (Linux 기준 /etc/ssl/certs)

7. 왜 중요한가

다음과 같은 상황에서 CA 목록 확인이 필요하다:

  • 특정 인증서가 신뢰되지 않는 경우
  • 사설 인증서 사용 시
  • TLS 오류 디버깅 (UNABLE_TO_VERIFY_LEAF_SIGNATURE 등)

8. 정리

  • Node.js는 기본 CA 목록을 내장하고 있다
  • tls.rootCertificates로 확인 가능하다
  • 옵션에 따라 OS CA를 사용할 수도 있다

결국 TLS 검증은 “CA 목록에 포함되어 있는가”로 결정된다.


반응형