acme.sh证书工具
什么是acme.sh?
acme.sh是一个用shell写的脚本,没有过多的依赖项,安装和使用都非常方便。acme.sh相关简介
Github官网:https://github.com/acmesh-official/acme.sh
Wiki文档地址:https://github.com/acmesh-official/acme.sh/wiki
1.acme.sh支持的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
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