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的安装目录。然后执行

image

 


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

企业微信截图_17701106997595

 

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 "===== 处理完成 ====="

 

posted on 2026-02-03 19:51  幸福的菜菜  阅读(0)  评论(0)    收藏  举报

导航