Skip to content

NestJS, mkcert CA 인증서 문제해결 방법

simjaesung edited this page Dec 1, 2024 · 1 revision

Nest 인증 문제

자체 서명된 인증서는 브라우저나 HTTP 클라이언트에서 기본적으로 신뢰하지 않기 때문에, NODE_TLS_REJECT_UNAUTHORIZED=0 설정을 통해 SSL 검증을 건너뛰도록 해야 하는 상황이 발생했었습니다.

제가 사용한 mkcert 또한 자체 서명된 인증서로 CA에서 발급된게 아니기에, 기본적으로 신뢰할 수 있는 인증서로 간주되지 않는다고 합니다. 이를 해결하기 위해 로컬 시스템에 자체 서명된 인증서를 신뢰할 수 있는 인증서로 등록할 수 있습니다.

다만, 이는 로컬 테스트 환경에서만 사용하기에 적합합니다.


mkcert CA 인증서 문제해결 방법

mkcert로 발급한 인증서를 Node.js에 SSL 인증서를 신뢰하도록 하기 위해 NODE_EXTRA_CA_CERTS 환경 변수를 설정해야 합니다. 이를 통해 Node.js가 mkcert의 자체 CA 인증서를 신뢰하게 할 수 있습니다.

1. mkcert CA 경로 확인

mkcert로 발급한 인증서의 CA 경로는 다음 명령어로 확인할 수 있습니다:

mkcert -CAROOT

이 명령을 실행하면 mkcert CA 인증서(rootCA.pem)가 위치한 경로가 표시됩니다.

  • ~/Library/Application Support/mkcert (macOS)
  • ~/.local/share/mkcert (Linux)
  • C:\\Users\\<username>\\AppData\\Local\\mkcert (Windows)

2. NODE_EXTRA_CA_CERTS 환경 변수 설정

NODE_EXTRA_CA_CERTS 환경 변수를 사용하여 Node.js가 mkcert의 루트 CA 인증서를 신뢰하도록 설정할 수 있습니다. 이 환경 변수는 Node.js가 추가로 신뢰해야 할 CA 인증서를 지정할 때 사용됩니다.

터미널에서 설정하기

로컬 개발 환경에서 터미널에 다음과 같이 입력해 NODE_EXTRA_CA_CERTS 환경 변수를 설정할 수 있습니다.

export NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"

위 명령을 실행하면, Node.js가 mkcert로 발급된 SSL 인증서를 신뢰하게 됩니다.


Windows 환경 설정 앞서 설명드린 방법은 mac OS에서 적용되는 방식이며, Windows에서 NODE_EXTRA_CA_CERTS 환경 변수를 설정하는 방법은 다음과 같습니다.

set NODE_EXTRA_CA_CERTS=C:\\path\\to\\mkcert\\rootCA.pem

위 명령에서 C:\\path\\to\\mkcert\\rootCA.pem 부분을 실제 CA 인증서 경로로 변경해 주세요.


주의사항

  • 환경 변수 설정은 터미널 세션마다 적용됩니다. 새로운 터미널 세션을 열 때마다 이 변수를 다시 설정해야 합니다.
  • 로컬 환경에서만 사용하고, 배포 환경에서는 Let’s Encrypt와 같은 공인된 인증서를 사용하는 것이 좋습니다.

이렇게 설정하면 httpsOptionsmkcert로 발급한 인증서를 사용하는 NestJS 애플리케이션이 SSL 검증 오류 없이 정상적으로 HTTPS 연결을 유지할 수 있습니다.

MafiaCamp

📔소개
🎯프로젝트 규칙
💻프로젝트 기획
🍀기술 스택
📚그룹 회고
🌈개발 일지
🍀문제 해결 경험
🔧트러블 슈팅
Clone this wiki locally