侧边栏壁纸
博主头像
laoliyun

生活总是这样,不能叫人处处都满意,但我们还要热情地活下去,人活一生值得爱的东西很多,不要因为一个不满意就灰心。

  • 累计撰写 138 篇文章
  • 累计创建 44 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

acme.sh自动生成并续费泛域名证书

laoliyun
2023-11-03 / 0 评论 / 0 点赞 / 341 阅读 / 1,546 字
温馨提示:
本文最后更新于 2023-11-03,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

问题:证书会距离一月更新,nginx未reload
简介
https://github.com/acmesh-official/acme.sh
acme.sh用于生成免费的ssl证书,其完整实现了acme协议,并且由纯Shell脚本语言编写,没有过多的依赖项,安装和使用都非常方便。

  1. 支持的CA

ZeroSSL.com CA(default):90天
Letsencrypt.org CA:90天
BuyPass.com CA:180天
SSL.com CA
Pebble strict Mode
Any other RFC8555-compliant CA

  1. 支持的运行模式

Webroot mode
Standalone mode
Standalone tls-alpn mode
Apache mode
Nginx mode
DNS mode
DNS alias mode
Stateless mode
整个部署流程非常简单,具体为以下三个步骤:
准备 DNS API
安装 acme.sh
执行申请部署命令
一、安装
1.1 在线安装

curl https://get.acme.sh | sh -s email=my@example.com
或
wget -O -  https://get.acme.sh | sh -s email=my@example.com

如果acme.sh使用zeroSSL CA,则这里的-s参数指定的邮箱可以关联到已有的zeroSSL账号。关联成功后,通过acme.sh生成的zeroSSL证书会在zeroSSL网站的控制面板上显示:

https://zerossl.com/

对于zerossl官网,需要指出的是,用户可以在控制台直接申请证书,但免费用户最多只能申请3个,而使用ACME申请zeroSSL证书则没有数目限制。
1.2通过git安装

git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install -m my@example.com

1.3安装操作做了哪些修改
(1)创建并复制acme.s到您的主目录~/.acme.sh/.。所有证书也将放在此文件夹中。
(2)创建别名 : acme.sh=~/.acme.sh/acme.sh。
注意,别名需要重启终端后才能生效。
(3)创建一个每日执行的cron任务,用于自动更新即将过期的证书

34 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

1.4卸载
卸载后,cron计划任务也会被移除:

acme.sh --uninstall

二. 生成证书
以域名example.com为例,生成的证书将放置在以下目录:
~/.acme.sh/example.com/
该目录之下是证书、私钥等文件以及一些其它配置文件:
证书文件: example.com.cer
私钥: example.com.key
中间证书: ca.cer
证书链:fullchain.cer

  1. 切换CA
    当前acme.sh使用的默认CA机构为zeroSSL,通过–set-default-ca命令,可以修改默认的CA机构,该命令使用–server参数来指定CA机构名称。
    切换默认CA为Let’s Encrypt:
acme.sh --set-default-ca --server letsencrypt

更换默认CA为ZeroSSL:

acme.sh --set-default-ca --server zerossl

2、DNS自动模式
DNS自动模式可以使用域名解析商提供的api自动为域名添加txt记录以完成域名所有权验证,不同于DNS手动模式,DNS自动模式支持自动更新证书。
2.1 准备 DNS API
通过使用域名服务商提供的 API 密钥,让acme.sh自动创建域名验证记录以申请域名证书. acme.sh 支持全球各种域名服务商的 API ,本文将以阿里云,腾讯云,Cloudflare为例。
2.2 阿里云
推荐使用子账户,并赋予子账户 DNS 权限,以确保安全性.

登陆阿里云控制台 - 访问控制 RAM - 身份管理-用户
新建用户(选中 OpenAPI 调用访问)自动生成AccessKey。获取AccessKeyId和AccessKeySecret。
授权该用户,搜索DNS,并将AliyunDNSFullAccess移动至右侧确定.

为acme.sh配置系统变量,存储api授权ID和密码。

export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"

2.3 配置 DNS API
编辑account.conf,根据上文获取的 API 格式,复制粘贴到文件中保存.

cd ~/.acme.sh
vi account.conf
export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"

注意目前 account.conf 仅支持一个 DNS API ,多个域名服务商的域名需单独加 --accountconf
2.4 生成证书

acme.sh --issue --server letsencrypt --dns dns_ali  -d '*.qiuluomu.top'

其中dns_dp为 腾讯云DNSPod.cn 服务商,自行根据官方dnsapi修改.例如:dns_ali为阿里云,dns_cf为CLoudflare.
该命令从系统变量中读取aliyun的api授权ID和密码,并通过dns_ali参数指定DNS提供商为阿里云。该命令将通过api自动为指定域名添加txt记录,并在验证完毕后自动移除txt记录。
多域名证书
acme.sh 可以同时申请多个域名.例如拥有域名aaa.com,bbb.com,ccc.com,只需要在命令后加上-d 空格 域名即可.

acme.sh --issue --server letsencrypt --dns dns_dp -d aaa.com -d *.aaa.com -d bbb.com -d *.bbb.com -d ccc.com -d *.ccc.com

多域名申请证书会将多个证书合并为一个证书,并存放到以第一个域名命名的文件夹内,证书信息仅显示第一个域名的信息.
2.5 查看已安装证书信息

acme.sh --info -d *.qiuluomu.top

nginx ssl配置

#使用此证书git有问题
#ssl_certificate /root/.acme.sh/*.qiuluomu.top/*.qiuluomu.top.cer;
ssl_certificate /root/.acme.sh/*.qiuluomu.top/fullchain.cer;
ssl_certificate_key /root/.acme.sh/*.qiuluomu.top/*.qiuluomu.top.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;

1、如何停止证书续订
要停止续订证书,可以执行以下操作以从续订列表中删除证书:

acme.sh --remove -d *.qiuluomu.top
[Fri Mar  3 11:56:16 CST 2023] *.qiuluomu.top is removed, the key and cert files are in /root/.acme.sh/*.qiuluomu.top
[Fri Mar  3 11:56:16 CST 2023] You can remove them by yourself.

证书/密钥文件未从磁盘中删除。
您可以自行删除相应的目录
2、如何升级acme.sh
acme.sh正在不断开发中,因此强烈建议使用最新的代码。
您可以将acme.sh更新为最新代码:

acme.sh --upgrade

您还可以启用自动升级:

acme.sh --upgrade --auto-upgrade

然后acme.sh将自动保持最新。
禁用自动升级:

acme.sh --upgrade --auto-upgrade 0
0

评论区