웹 개발이나 테스트 환경에서 HTTPS는 필수적입니다. 특히 최신 브라우저 보안 정책 때문에 쿠키나 API 호출 등 많은 기능이 HTTPS를 요구합니다. 하지만 공인 인증서를 발급받는 과정은 비용과 도메인 소유 인증 절차 때문에 번거롭습니다. 이런 경우에는 mkcert를 사용해 간편하게 TLS 인증서를 생성하는 것이 효과적입니다.
Kubernetes 환경에서는 cert-manager를 통해 인증서를 자동으로 관리할 수 있습니다. 그러나 애플리케이션을 삭제하고 재배포할 때 기존 인증서를 재사용하지 않고 새로운 인증서를 발급받게 되어, 인증서 관리가 복잡해질 수 있습니다. 이로 인해 애플리케이션 배포 과정에서 불필요한 인증서 갱신이 발생하고, 관련 설정을 다시 배포해야 하는 문제가 생길 수 있습니다.
이번 글에서는 Makefile을 활용하여 mkcert를 설치하고, TLS 인증서를 쉽게 생성하는 방법을 알아보겠습니다. Makefile에 대한 전체 구성을 바로 보려면 하단 “7. Makefile 전체 구성"으로 이동하면 됩니다. 이 Makefile을 실행하려면 사용자가 **sudo 권한(sudoer)**을 가지고 있어야 합니다.
1. Makefile 환경 설정
다음과 같이 인증서 생성을 위해 Makefile 환경을 설정합니다.
.PHONY: deps install root-ca cert help
ARCH := $(shell uname -m | sed -e 's/x86_64/amd64/' -e 's/aarch64/arm64/')
CAROOT := ./root-ca
.PHONY로 정의된 타겟들은 실제 파일과 관계없이 항상 실행되도록 설정했습니다.ARCH변수는 현재 시스템 아키텍처를 자동으로 감지하여 mkcert 다운로드 파일명을 결정하는 데 사용됩니다.CAROOT는 루트 인증서가 저장될 디렉토리를 지정합니다.
2. 시스템 의존성 설치
mkcert를 사용하기 위해서는 일부 시스템 라이브러리가 필요합니다. Makefile에서 deps 타겟은 이 과정을 자동으로 처리합니다.
deps: ## Install required system dependencies (e.g. libnss3-tools)
sudo apt-get update -qq
sudo apt-get install -y libnss3-tools
위 명령은 Ubuntu 환경을 기준으로
libnss3-tools를 설치합니다. 이는 mkcert가 로컬 브라우저 신뢰 저장소에 인증서를 등록하는 데 필요한 도구입니다.
3. mkcert 설치
install 타겟을 실행하면 mkcert 바이너리를 다운로드하고 /usr/local/bin에 설치합니다.
install: deps ## Download mkcert binary and install to /usr/local/bin
VERSION=v1.4.3 && \
FILE=mkcert-$$VERSION-linux-$(ARCH) && \
echo "Downloading $$FILE..." && \
curl -L https://github.com/FiloSottile/mkcert/releases/download/$$VERSION/$$FILE -o mkcert && \
chmod +x mkcert && \
sudo mv mkcert /usr/local/bin/mkcert
- 시스템 아키텍처(x86_64, aarch64 등)를 자동으로 감지하여 올바른 바이너리를 다운로드합니다.
4. 루트 인증서 생성 및 설치
mkcert를 사용하려면 먼저 루트 인증서를 생성해야 합니다. 이를 위해 root-ca 타겟을 사용합니다.
root-ca: ## Generate root CA for mkcert
mkdir -p $(CAROOT) && \
CAROOT=$(CAROOT) mkcert -install && \
sudo cp $(CAROOT)/rootCA.pem /usr/local/share/ca-certificates/mkcert-rootCA.crt && \
sudo update-ca-certificates
- 생성된 루트 인증서는 시스템에 등록되어, 브라우저에서 로컬 인증서를 신뢰할 수 있게 됩니다.
- 다른 서버나 로컬 환경에서는 이 루트 인증서를 복사하여 시스템 인증 저장소에 등록해야 합니다.
5. 로컬 TLS 인증서 생성
마지막으로 cert 타겟을 통해 실제 TLS 인증서를 생성할 수 있습니다.
cert: ## Generate local TLS certificates using mkcert
mkdir -p ./tls; \
CAROOT=$(CAROOT) mkcert \
-cert-file ./tls/tls.crt -key-file ./tls/tls.key \
cnap.dev "*.cnap" local "*.local"
- 실행 후
./tls디렉토리에tls.crt와tls.key파일이 생성됩니다. - 발급된 인증서는
cnap.dev, 모든*.cnap도메인,local,*.local도메인에서 사용 가능합니다.
6. 사용 가능한 타겟 확인
Makefile에는 help 타겟이 포함되어 있어, 작성된 타겟과 설명을 확인할 수 있습니다.
help: ## Show available targets and descriptions
@echo "Usage: make <target>"
@echo ""
@echo "Targets:"
@grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) \
| sort \
| awk -F ':.*?## ' '{printf " %-20s %s\n", $$1, $$2}'
- 터미널에서
make help를 실행하면 다음과 같이 안내가 출력됩니다.
Usage: make <target>
Targets:
deps Install required system dependencies (e.g. libnss3-tools)
install Download mkcert binary and install to /usr/local/bin
root-ca Generate root CA for mkcert
cert Generate local TLS certificates using mkcert
help Show available targets and descriptions
7. Makefile 전체 구성
앞서 다룬 내용을 하나로 묶어 완성된 Makefile입니다.
.PHONY: deps install root-ca cert help
ARCH := $(shell uname -m | sed -e 's/x86_64/amd64/' -e 's/aarch64/arm64/')
CAROOT := ./root-ca
deps: ## Install required system dependencies (e.g. libnss3-tools)
sudo apt-get update -qq
sudo apt-get install -y libnss3-tools
install: deps ## Download mkcert binary and install to /usr/local/bin
VERSION=v1.4.3 && \
FILE=mkcert-$$VERSION-linux-$(ARCH) && \
echo "Downloading $$FILE..." && \
curl -L https://github.com/FiloSottile/mkcert/releases/download/$$VERSION/$$FILE -o mkcert && \
chmod +x mkcert && \
sudo mv mkcert /usr/local/bin/mkcert
root-ca: ## Generate root CA for mkcert
mkdir -p $(CAROOT) && \
CAROOT=$(CAROOT) mkcert -install && \
sudo cp $(CAROOT)/rootCA.pem /usr/local/share/ca-certificates/mkcert-rootCA.crt && \
sudo update-ca-certificates
cert: ## Generate local TLS certificates using mkcert
mkdir -p ./tls; \
CAROOT=$(CAROOT) mkcert \
-cert-file ./tls/tls.crt -key-file ./tls/tls.key \
cnap.dev "*.cnap" local "*.local"
help: ## Show available targets and descriptions
@echo "Usage: make <target>"
@echo ""
@echo "Targets:"
@grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) \
| sort \
| awk -F ':.*?## ' '{printf " %-20s %s\n", $$1, $$2}'
8. 마무리
이번 글에서는 Makefile을 활용해 mkcert 설치부터 루트 인증서 생성, TLS 인증서 발급까지 자동화하는 방법을 살펴보았습니다.
- 간단한 설치:
make install한 번으로 mkcert 설치 가능 - 자동화된 루트 CA 생성:
make root-ca로 시스템에 신뢰된 루트 인증서 등록 - 편리한 로컬 인증서 생성:
make cert로 개발용 TLS 인증서 발급
이 Makefile을 사용하면 매번 복잡한 mkcert 명령어를 입력할 필요 없이, TLS 인증서를 손쉽게 발급하여 개발이나 테스트 환경에 적용할 수 있습니다.