侧边栏壁纸
博主头像
平凡之路博主等级

生活原本沉闷,但跑起来就会有风!

  • 累计撰写 82 篇文章
  • 累计创建 10 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

windows 通过acme.sh申请华为云通配证书

平凡之路
2023-12-13 / 1 评论 / 0 点赞 / 659 阅读 / 1,404 字

前言:

大部分建站使用的都是免费证书,但是域名商的免费证书没办法申请通配泛域名证书,很不方便。增加一个二级域名都需要去申请。现在各个域名商也都收紧了免费证书的有效期和个数。acme.sh是linux服务器上最常用的申请证书的脚本。windows上没有一个支持它那么多可以通过域名商api自动验证dns的方式。特别是在国内华为云的域名。腾讯云和阿里云的证书还是有很多工具支持 如 win-acme lego 等。我记录下在windos上使用acme.sh的方式。

一键包下载

1、windows上安装linux命令模拟工具cygwin 。
下载地址:https://www.cygwin.com/
安装没什么特别的,在最后选择要安装的命令的时候选择几个需要用到的命令 wget curl git
image
image-1702437045541

2、安装完后打开桌面生成的cygwin命令行
image-1702437098528

3、下载acme.sh脚本 解压到c盘
下载地址:https://github.com/acmesh-official/acme.sh

4、修改华为云dnsapi里面的账号信息 参照华为云后台信息
image-1702437267783
image-1702437234804

5、在cygwin命令行进入到acme.sh目录
image-1702437365819

6、接着就可以按照acme脚本支持的命令进行操作了。
1

7、acme常用命令解析

申请证书命令
修改成你自己的域名和邮箱,其他域名商的使用都差不多。
–server 可选 是指定从哪里申请 不指定默认是从zerossl
-d 必须 指定主域名 和泛域名
–email 可选 快到期会收到邮件通知
–use-wget 可选
–dnssleep 可选 验证dns等待的时间 防止太短还没生效
–force 可选 当证书还没过期 强制申请

./acme.sh --issue  --server letsencrypt --dns dns_huaweicloud -d xxx.com -d '*.xxxxx.com' --email 12345678@qq.com --use-wget --dnssleep 60

续签证书命令
参数跟申请证书差不多,如果申请证书指定了–server 那保持一致即可。
–days 可选 默认是30 指定证书有效期多久之内重新续签
ps: 申请和续签可以都使用–issue 参数,–renew在本机没有证书的情况下是不会申请的。
–issue在本机没有证书的情况下会申请,在本机有证书但是没过期或者过期的处理和–renew是一样的效果!

./acme.sh --renew --server letsencrypt --dns dns_huaweicloud -d xxxx.com -d '*.xxxxx.com' --use-wget --dnssleep 60  --days 30

安装证书
将生成的证书复制到nginx证书目录下,路径用 / 或\
–key-file 复制到指定位置
–fullchain-file 复制到指定位置
–reloadcmd 可选 安装完成后要执行的命令

./acme.sh --install-cert -d gxycykj.com --key-file D:\\nginx\\conf\\cert\\xxx.com\\privkey.pem  --fullchain-file D:\\nginx\\conf\\cert\\xxxx.com\\fullchain.pem --reloadcmd "net stop nginx
&& net start nginx"

拓展用法
1、实现在续签后再安装证书 同时重启nginx服务,直接用–renew-hook 将续签和安装步骤串起来
–post-hook 在证书申请成功后要执行的操作
–renew-hook 在证书自动续期后要执行的操作

./acme.sh --renew --server letsencrypt --dns dns_huaweicloud -d xxxx.com -d '*.xxxxx.com' --use-wget --dnssleep 60  --days 30  --renew-hook "./acme.sh --install-cert -d xxxx.com --key-file D:\\nginx\\conf\\cert\\xxx.com\\privkey.pem  --fullchain-file D:\\nginx\\conf\\cert\\xxxx.com\\fullchain.pem --reloadcmd "net stop nginx
&& net start nginx""

2、实现通过windows的计划任务定时执行续签脚本。参照bat内容如下:

@echo off
title CYGWIN-ACME续签
echo 【开始续订证书,注意letsencrypt有访问次数限制,不要频繁续订!!】

rem 将输出日志文件保存在当前批处理文件所在目录下
set LOG_FILE=%~dp0output.log
set domain=123.com
set dnsapi=dns_tencent
set certpath=/cygdrive/d/nginx/conf/cert
set websvr=nginx
rem 设置阿里云dnsapi密钥信息
set Ali_Key=
set Ali_Secret=
rem 设置腾讯云dnsapi密钥信息
set Tencent_SecretId=
set Tencent_SecretKey=
rem 设置华为云dns密钥信息
set HUAWEICLOUD_Username=
set HUAWEICLOUD_Password=
set HUAWEICLOUD_DomainName=

rem 执行续订证书的命令,并将输出同时显示在控制台和保存到日志文件中
bin\bash.exe --login -c "/acme/acme.sh --issue --server letsencrypt --dns %dnsapi% -d %domain% -d '*.%domain%' --use-wget --dnssleep 60 2>&1 | tee "%LOG_FILE%""

rem 检查日志文件中是否包含 "Skip" 字符串
findstr /I /C:"Skip" "%LOG_FILE%" > nul

rem 如果找到了 "Skip" 字符串,则输出提示信息
if %errorlevel% equ 0 (
    echo 【跳过续签,因为证书有效期大于30天!】
) else (
    echo 【开始安装续订到证书到WEB服务下!】
    bin\bash.exe --login -c "/acme/acme.sh --install-cert -d %domain% --key-file %certpath%/privkey.pem --fullchain-file %certpath%/fullchain.pem"

    timeout /t 2
    echo 【开始重启WEB服务加载续订证书!】
    net stop %websvr%
    net start %websvr%
)

rem 删除日志文件
del "%LOG_FILE%"

timeout /t 10

其他命令

设置默认ca服务商,也可以在申请的时候指定–server
acme.sh --set-default-ca --server letsencrypt

查看证书列表
acme.sh --list

查看证书信息
openssl x509 -noout -text -in fullchain.cer

acme.sh --info -d returnc.com

吊销证书
acme.sh --revoke --domain returnc.com

从列表中删除证书
acme.sh --remove -d returnc.com

acme.sh脚本升级
acme.sh --upgrade

acme.sh脚本开启自动升级
acme.sh --upgrade --auto-upgrade

0

评论区