Windows, ngix 서버에서 win-acme로 Let's Encrypt 인증서 자동갱신 설정하기
2025-12-05 오후 6:02:39
1764856837198.png)
Windows, nginx 서버에서 win-acme로 Let's Encrypt 인증서 자동갱신 설정하기
Windows에서 Nginx 서버를 사용할 때 Let's Encrypt SSL 인증서를 자동으로 갱신하는 방법을 정리했습니다.
Linux에서는 Certbot이 일반적이지만, Windows에서는 win-acme가 가장 편리한 도구입니다.
구글링 해봐도, Window, nginx 기반 환경에서 자동 갱신까지 잘 동작하도록 정리된 글이 없어서 작성하게 되었습니다.
환경
- Windows 10
- Nginx 1.24.0
- win-acme v2.2.9
1. win-acme 다운로드
win-acme GitHub Releases에서 최신 버전을 다운로드합니다.
win-acme.v2.2.9.1701.x64.trimmed.zip
압축을 해제하고 원하는 경로에 배치합니다.
2. Nginx 설정 수정
win-acme의 Webroot 방식을 사용하면 Nginx를 중단하지 않고 인증서를 갱신할 수 있습니다. 이를 위해 ACME 검증 경로를 설정해야 합니다.
nginx.conf 80번 포트 설정
server { listen 80; server_name develogger.kro.kr; # ACME 인증서 검증용 (반드시 리다이렉트보다 먼저 선언) location /.well-known/acme-challenge/ { root C:/nginx/html; # 본인의 nginx html 경로 } # 나머지 요청은 HTTPS로 리다이렉트 location / { return 301 https://$host$request_uri; } }
주의사항
- 경로는 역슬래시(
\)가 아닌 슬래시(/)를 사용location /.well-known/acme-challenge/가location /보다 먼저 선언되어야 함return 301은 반드시location /블록 안에 있어야 함
검증 폴더 생성
mkdir "C:\nginx\html\.well-known\acme-challenge"
Nginx 재시작
nginx -t # 문법 검사 nginx -s reload # 재시작
설정 테스트
echo "test" > "C:\nginx\html\.well-known\acme-challenge\test.txt"
브라우저에서 http://yourdomain.com/.well-known/acme-challenge/test.txt 접속하여 "test"가 표시되면 성공입니다.
3. win-acme로 인증서 발급
실행
cd "C:\path\to\win-acme" .\wacs.exe
참고: PowerShell에서 현재 디렉토리의 실행 파일은
.\를 붙여야 합니다.
메뉴 선택 순서
| 단계 | 질문 | 선택 |
|---|---|---|
| 1 | 메인 메뉴 | M (Create certificate - full options) |
| 2 | 도메인 결정 방법 | 2 (Manual input) |
| 3 | Host 입력 | yourdomain.com |
| 4 | Friendly name | Enter (기본값 사용) |
| 5 | 인증서 분할 여부 | 4 (Single certificate) |
| 6 | 검증 방식 | 1 (Save verification files on path) |
| 7 | Path 입력 | C:/nginx/html |
| 8 | web.config 복사 | n (Nginx는 불필요) |
| 9 | 키 종류 | 2 (RSA key) |
| 10 | 저장 방식 | 2 (PEM encoded files) |
| 11 | 파일 경로 | 원하는 SSL 인증서 저장 경로 |
| 12 | 비밀번호 | 1 (None) |
| 13 | 추가 저장소 | 5 (No additional store steps) |
| 14 | 설치 단계 | 3 (No installation steps) |
발급 성공 메시지
Certificate [Manual] yourdomain.com created
4. Nginx SSL 설정
발급된 인증서를 Nginx에 적용합니다.
server { listen 443 ssl; server_name yourdomain.com; ssl_certificate C:/path/to/ssl/yourdomain.com-chain.pem; ssl_certificate_key C:/path/to/ssl/yourdomain.com-key.pem; ... }
비밀번호 없이 발급한 경우: 기존에
ssl_password_file설정 불필요.
5. 자동 갱신 설정
win-acme는 인증서 발급 시 자동으로 Windows 작업 스케줄러에 갱신 작업을 등록합니다.
작업 스케줄러 확인
taskschd.msc
win-acme renew (acme-v02.api.letsencrypt.org) 작업이 등록되어 있어야 합니다.
등록된 작업 정보
| 항목 | 값 |
|---|---|
| 실행 시간 | 매일 오전 9:00 |
| 랜덤 지연 | 최대 4시간 |
| 실행 계정 | SYSTEM |
| 명령어 | wacs.exe --renew --baseuri "https://acme-v02.api.letsencrypt.org/" |
수동으로 작업 등록하기
작업이 없거나 문제가 있다면 관리자 권한 PowerShell에서:
.\wacs.exe --setuptaskscheduler
6. Nginx 자동 재시작 설정
인증서가 갱신되면 Nginx가 새 인증서를 로드하도록 재시작해야 합니다.
작업 스케줄러에 Nginx 재시작 작업을 등록하여 자동화할 수 있습니다.
restart-nginx.bat 파일 생성
Nginx가 설치된 경로에 배치 파일을 생성합니다.
@echo off pushd "%~dp0" nginx -s reload
참고:
%~dp0는 배치 파일이 위치한 디렉토리 경로입니다. Nginx 폴더에 이 파일을 넣어두면 자동으로 해당 경로에서 실행됩니다.
작업 스케줄러에 등록
taskschd.msc실행- 작업 만들기 클릭
- 일반 탭 설정:
- 이름:
reload nginx - 가장 높은 수준의 권한으로 실행 체크
- 이름:
- 트리거 탭:
- 새로 만들기 클릭
- 매일, 오전 9:01 (win-acme 실행 직후)
- 동작 탭:
- 새로 만들기 클릭
- 프로그램/스크립트:
C:\path\to\nginx\restart-nginx.bat
- 확인 클릭
실행 시간 설정 팁
| 작업 | 실행 시간 |
|---|---|
| win-acme renew | 오전 9:00 |
| reload nginx | 오전 9:01 |
win-acme가 먼저 실행되고 1분 후에 Nginx가 재시작되도록 설정하면 새 인증서가 확실히 적용됩니다.
7. 갱신 테스트
강제 갱신 테스트
.\wacs.exe --renew --force --nocache --baseuri "https://acme-v02.api.letsencrypt.org/"
주의:
--force는 테스트용입니다. Let's Encrypt는 주당 5회 발급 제한이 있으므로 작업 스케줄러에는 추가하지 마세요.
작업 스케줄러에서 수동 실행
taskschd.msc열기win-acme renew작업 우클릭- 실행 클릭
8. 트러블슈팅
포트 80 사용 중 오류
Unable to activate listener... port 80
해결: SelfHosting 방식 대신 Webroot 방식을 사용하세요 (본 가이드의 방법).
404 Not Found 오류
Invalid response... 404
해결:
- nginx.conf에서
location /.well-known/acme-challenge/가 올바르게 설정되었는지 확인 return 301이location /블록 안에 있는지 확인- 경로에 슬래시(
/) 사용 확인 nginx -s reload실행
PowerShell에서 wacs.exe 실행 안 됨
'wacs.exe' 용어가 cmdlet... 인식되지 않습니다.
해결: .\wacs.exe로 실행하세요.
9. 정리
| 항목 | 내용 |
|---|---|
| 도구 | win-acme |
| 검증 방식 | Webroot (HTTP-01) |
| 갱신 주기 | 만료 약 30일 전 자동 갱신 |
| Nginx 재시작 | 갱신 직후 자동 reload |
| 장점 | Nginx 중단 없이 갱신 가능 |
이제 Let's Encrypt 인증서가 자동으로 갱신되므로 더 이상 만료 걱정을 하지 않아도 됩니다!