acme.sh证书工具

什么是acme.sh?

acme.sh是一个用shell写的脚本,没有过多的依赖项,安装和使用都非常方便。

TOC

acme.sh相关简介

Github官网:https://github.com/acmesh-official/acme.sh
Wiki文档地址:https://github.com/acmesh-official/acme.sh/wiki

1.acme.sh支持的CA

2.支持的运行模式

  • Webroot mode
  • Standalone mode
  • Standalone tls-alpn mode
  • Apache mode
  • Nginx mode
  • DNS mode
  • DNS alias mode
  • Stateless mode

安装acme.sh

在线安装

curl命令工具安装:

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

wget命令工具安装:

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

通过git安装

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

安装后信息

通过以上的方式安装之后acme.sh会安装到用户目录下
以root用户为例子,acme.sh的安装目录就是:/root/.acme.sh(该目录为隐藏目录)
其中核心脚本就是安装目录下的acme.sh脚本
查看工具配置信息(可以在安装目录下的account.conf文件查看)

acme.sh的使用

acme.sh命令参数

语法:cd【选项】【选项参数】
–issue:请求证书并进行验证。
–accountemail(或 -m):设置与 Let’s Encrypt 帐户关联的邮箱地址。
–dns:指定 DNS API 插件来进行 DNS 验证。
–server:制定CA机构名称。
–renew:更新证书,检查证书的有效期并在接近到期时自动进行更新。
–installcert:安装证书到指定的位置。
–revoke:撤销指定的证书。
–remove:移除指定的证书。
–list:列出当前系统上已安装的证书。
–cron:在 Cron 作业中自动化证书的管理,包括检查和更新。
–config-home:设置 acme.sh 的配置文件存储路径。
–standalone:在独立模式下运行验证,使用 acme.sh 内置的 HTTP 服务器。
–webroot:指定 Web 根目录用于 HTTP 验证。
–reloadcmd:重新加载 Web 服务器配置的命令。
–deploy-hook:在安装或更新证书后执行的自定义脚本。
–accountkey:指定用于帐户的私钥文件路径。
–keylength:指定生成证书时的密钥长度。
–cert-file:指定生成的证书文件路径。
–fullchain-file:指定生成的完整证书链文件路径。

生成证书

以使用root账号以及域名example.com为例,生成的证书将放置在以下目录:/root/.acme.sh/example.com/

1.切换CA

acme.sh默认使用CA机构为zeroSSL,如果不加–server选项将使用默认的机构

#切换默认CA为Let's Encrypt:
acme.sh --set-default-ca --server letsencrypt
#更换默认CA为ZeroSSL:
acme.sh --set-default-ca --server zerossl

2.申请证书

使用阿里云DNS
首先先要设置阿里云的ak和sk,这里xxxxxx设置你的就行

export Ali_Key="xxxxxxxxxxxxxxxxxxxxxx"
export Ali_Secret="xxxxxxxxxxxxxxxxxxxxxx"

然后执行命令申请证书

acme.sh --issue --dns dns_ali -m example@example.com -d "exampl.com" -d "a.exampl.com,b.exampl.com"

后面可以跟很多-d添加附加的域名
使用腾讯云DNS
跟阿里云一样设置腾讯云的ak和sk

export DP_Id="xxxxxxxxxxxxxxxxxxxxxx"
export DP_Key="xxxxxxxxxxxxxxxxxxxxxx"

然后执行命令申请证书

acme.sh --issue --dns dns_dp -m example@example.com -d "exampl.com" -d "a.exampl.com,b.exampl.com"

注意:其他还有很多dnsapi可以通过官网wiki文档查看详情
证书文件分类:
证书文件:example.com.cer
私钥:example.com.key
中间证书:ca.cer
证书链:fullchain.cer

部署证书

可以通过acme.sh的–install-cert命令来拷贝部署证书(以nginx为例)

acme.sh --install-cert -d example.com \
--key-file       /etc/nginx/key.pem  \
--fullchain-file /etc/nginx/cert.pem \
--reloadcmd     "systemctl nginx reload"

–reloadcmd参数用于执行重新加载nginx配置的命令

更新证书

手动更新证书:

acme.sh --renew -d example.com

更新ecc证书:

acme.sh --renew -d example.com --ecc

acme.sh只会更新有效期不足30天的证书,如果想强制更新,则增加—force参数
停止更新证书:

acme.sh --remove -d example.com [--ecc]

其他操作

#查看已经生成的证书
acme.sh --list
#查看acme.sh报错debug
acme.sh --debug
#查看acme.sh报错error
acme.sh --debug 2
#生成日志,日志文件路径为:~/.acme.sh/acme.sh.log
acme.sh --log