windows下使用ACME申请SSL证书的办法
1、安装git
先安装git 要用到 git bash 执行.sh
2、执行命令
curl https://get.acme.sh | sh
3、确认安装成功
~/.acme.sh/acme.sh --version
4、配置域名解析的地址
主要是location /.well-known/acme-challenge/ 的部分
这一步是为了测试该域名下的该文件是否能正确访问,因为acme会用同样的方式验证
server {
listen 80 default_server;
server_name _;
location /.well-known/acme-challenge/ {
alias f:/nginx/html/acme/;
try_files $uri =404;
}
location / {
return 444;
}
}
可以在 f:/nginx/html/acme/ 目录下创建测试文件 test.txt,并在文件内写点内容,确保能显示信息
5、测试通没有
浏览器访问:
http://example.com/.well-known/acme-challenge/test.txt
5、
通了后改配置,因为acme会自动生成.well-known/acme-challenge/
server {
listen 80 default_server;
server_name _;
location /.well-known/acme-challenge/ {
alias f:/nginx/html/acme/.well-known/acme-challenge/;
try_files $uri =404;
}
location / {
return 444;
}
}
6、在git bash下执行
~/.acme.sh/issue_nginx_cert_zh.sh example.com
如果失败,则将issue_nginx_cert_zh.sh拷贝至 acme的安装目录。然后执行

6.1 Windows执行
/c/Users/Administrator/.acme.sh/issue_nginx_cert_zh.sh example.com
这一步会向acme申请ssl的key,请耐心等待,过程后的图为:

7、定期执行
放进定时任务
schtasks /create /sc daily /tn "acme.sh" /tr "\"C:\Program Files\Git\bin\bash.exe\" -c '\"C:/Users/Administrator/.acme.sh/acme.sh\" --cron --home \"C:/Users/Administrator/.acme.sh\" > \"C:/Users/Administrator/.acme.sh/acme.log\" 2>&1'" /st 03:00 /rl HIGHEST
这一步本质是执行 acme.sh --cron
自动检查并续期即将过期的SSL证书
issue_nginx_cert_zh.sh 的代码如下
#!/bin/bash # 用法:bash issue_nginx_cert.sh test.example.com DOMAIN="$1" # ----------------------------- # 中文输出函数(兼容 CMD / PowerShell / Git Bash) # ----------------------------- echocp() { # 如果在 Git Bash,直接输出 if [ -n "$MSYSTEM" ]; then printf '%s\n' "$1" else # CMD / PowerShell 下用 iconv 转 CP936 printf '%s\n' "$1" | iconv -f UTF-8 -t CP936 fi } if [ -z "$DOMAIN" ]; then echocp "请提供域名,例如: bash issue_nginx_cert.sh test.example.com" exit 1 fi # ----------------------------- # 配置区(根据你环境修改) # ----------------------------- ACME_HOME="$HOME/.acme.sh" # acme.sh 安装目录 WEBROOT="C:/WebServer/nginx-1.28.1/html/acme" # 用于验证的 webroot NGINX_EXE="C:/WebServer/nginx-1.28.1/nginx.exe" # nginx 可执行文件 NGINX_CONF="C:/WebServer/nginx-1.28.1/conf/nginx.conf" # nginx 配置文件 CERT_DIR="C:/WebServer/nginx-1.28.1/conf/cert" # 存放证书目录 LOG_FILE="$ACME_HOME/acme_ini.log" # 日志文件 echocp "===== 开始处理证书:$DOMAIN =====" # ----------------------------- # 1. 签发证书(RSA 2048,覆盖旧证书) # ----------------------------- "$ACME_HOME/acme.sh" --issue \ -d "$DOMAIN" -w "$WEBROOT" \ --keylength 2048 \ --force \ --server https://acme-v02.api.letsencrypt.org/directory \ 2>&1 | tee -a "$LOG_FILE" if [ $? -ne 0 ]; then echocp "证书申请失败,请查看日志:$LOG_FILE" exit 1 fi echocp "证书申请成功:$DOMAIN" # ----------------------------- # 2. 安装证书到 nginx # ----------------------------- "$ACME_HOME/acme.sh" --install-cert -d "$DOMAIN" \ --key-file "$CERT_DIR/$DOMAIN.key" \ --fullchain-file "$CERT_DIR/${DOMAIN}_bundle.crt" \ --reloadcmd "\"$NGINX_EXE\" -p C:/WebServer/nginx-1.28.1 -c conf/nginx.conf -s reload" \ 2>&1 | tee -a "$LOG_FILE" if [ $? -ne 0 ]; then echocp "证书安装或 nginx reload 失败,请查看日志:$LOG_FILE" exit 1 fi echocp "证书安装并重载 nginx 成功:$DOMAIN" echocp "===== 处理完成 ====="
浙公网安备 33010602011771号