Windows, ngix 서버에서 win-acme로 Let's Encrypt 인증서 자동갱신 설정하기

2025-12-05 오후 6:02:39
SSL
let's encrypt
win-acme
Windows, ngix 서버에서 win-acme로 Let's Encrypt 인증서 자동갱신 설정하기

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)
3Host 입력yourdomain.com
4Friendly nameEnter (기본값 사용)
5인증서 분할 여부4 (Single certificate)
6검증 방식1 (Save verification files on path)
7Path 입력C:/nginx/html
8web.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 폴더에 이 파일을 넣어두면 자동으로 해당 경로에서 실행됩니다.

작업 스케줄러에 등록

  1. taskschd.msc 실행
  2. 작업 만들기 클릭
  3. 일반 탭 설정:
    • 이름: reload nginx
    • 가장 높은 수준의 권한으로 실행 체크
  4. 트리거 탭:
    • 새로 만들기 클릭
    • 매일, 오전 9:01 (win-acme 실행 직후)
  5. 동작 탭:
    • 새로 만들기 클릭
    • 프로그램/스크립트: C:\path\to\nginx\restart-nginx.bat
  6. 확인 클릭

실행 시간 설정 팁

작업실행 시간
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회 발급 제한이 있으므로 작업 스케줄러에는 추가하지 마세요.

작업 스케줄러에서 수동 실행

  1. taskschd.msc 열기
  2. win-acme renew 작업 우클릭
  3. 실행 클릭

8. 트러블슈팅

포트 80 사용 중 오류

Unable to activate listener... port 80

해결: SelfHosting 방식 대신 Webroot 방식을 사용하세요 (본 가이드의 방법).

404 Not Found 오류

Invalid response... 404

해결:

  1. nginx.conf에서 location /.well-known/acme-challenge/가 올바르게 설정되었는지 확인
  2. return 301location / 블록 안에 있는지 확인
  3. 경로에 슬래시(/) 사용 확인
  4. nginx -s reload 실행

PowerShell에서 wacs.exe 실행 안 됨

'wacs.exe' 용어가 cmdlet... 인식되지 않습니다.

해결: .\wacs.exe로 실행하세요.

9. 정리

항목내용
도구win-acme
검증 방식Webroot (HTTP-01)
갱신 주기만료 약 30일 전 자동 갱신
Nginx 재시작갱신 직후 자동 reload
장점Nginx 중단 없이 갱신 가능

이제 Let's Encrypt 인증서가 자동으로 갱신되므로 더 이상 만료 걱정을 하지 않아도 됩니다!

User Profile Icon
LKHcoding
Front-End Developer