本文重在 acme.sh 的申请证书步骤,使用证书请到: 未写
指标 | 描述 |
---|---|
适用系统 | 常见系统 Windows、Linux、Mac OS 等,本文使用 Debian 演示,以 Nginx 反代作为使用场景 |
走通流程时间 | 5 分钟 |
I might have made some mistakes, please let me know if I’ve gotten anything wrong!
acme.sh 是一个开源免费的 SSL 证书签发和续期脚本工具,目前 acme.sh 支持五个正式环境 CA,分别是 ZeroSSL 、Let’s Encrypt、Buypass、SSL.com、谷歌SSL证书,默认使用 ZeroSSL。
acme.sh 的优势在于使用简单,几个命令即可申请,并且能自动续期证书,除了 ZeroSSL 是 180 天一续期外,Let’s Encrypt、Buypass、SSL.com、谷歌 SSL 证书等都是 90 天一续期。
GitHub:acmesh-official/acme.sh: A pure Unix shell script implementing ACME client protocol (github.com)
简易快速步骤
- 使用 root:
sudo -i
- 安装并启用 acme.sh 脚本,记得改邮箱(安装地址是在 /root/.acme.sh/acme.sh)
apt install -y curl && \
curl https://get.acme.sh | sh -s email=vgamebox@outlook.com && \
source ~/.bashrc
- (可选)切换证书签发机构
acme.sh --set-default-ca --server letsencrypt
- 签发证书,根据情况有多种选择
Nginx 默认的配置的目录是在 /var/www/html 下,用它申请证书
acme.sh --issue -d vfly2.com --webroot /var/www/html
类似 Nginx,litespeed 可以用这个
acme.sh --issue -d vfly2.com --webroot /usr/local/lsws/wordpress
使用 webroot 的原理是,在你的网站根目录下放置一个文件,来验证你的域名所有权
80 端口空闲情况下,acme.sh 可以监听 80 端口验证(注意,如果后面 80 端口被占用,就不能自动更新了,因此这个仅推荐单次申请和 80 端口始终空闲)
# 这种方式需要安装有 socat , sudo apt install socat
acme.sh --issue -d vfly2.com --standalone
查看签发的证书
ls -al ~/.acme.sh
- 安装证书
acme.sh --install-cert -d vfly2.com \
--key-file /etc/ssl/private/vfly2.com.key \
--fullchain-file /etc/ssl/certs/vfly2.com.cer
根据 Web 服务器不同,需要的证书类型也不一定相同。证书类型说明:
--cert-file < file >
。 cert.pem 服务端证书--key-file < file >
。privkey.pem 证书的私钥--ca-file < file >
。ca.pem 数字证书--fullchain-file < file >
- fullchain.pem 包括了 cert.pem 和 chain.pem 的内容
- chain.pem 浏览器需要的所有证书,比如根证书和中间证书,但不包括服务端证书
- 开启 acme.sh 自动升级
acme.sh --upgrade --auto-upgrade
如果没能自动更新,重复执行前面的申请证书命令即可,如果证书未过期需要加 -f 强制更新
- 在 Nginx 或 Apache2 等 Web 服务器中使用
使用 DNS 验证申请证书
原理是在域名上添加一条 txt 解析记录,验证域名所有权。可以手动也可以自动,若想自动更新证书,只能自动。
这种方式的好处是:不需要任何服务器,不需要任何公网 ip,只需要 dns 的解析记录即可完成验证。
自动 DNS 验证
普遍步骤都是到域名商后台获取 API 的 key 等,然后在服务器上添加进环境变量,acme.sh 就能读取这些信息并依此添加 txt 记录和申请证书。
先在官网后台申请 NameSilo API Key,然后按照文档 https://github.com/acmesh-official/acme.sh/wiki/dnsapi#35-use-namesilocom-api 将 API Key 添加为环境变量,和使用
export Namesilo_Key="s86dkv5xdf52xfghsa5"
acme.sh --issue --dns dns_namesilo -d vfly2.com --dnssleep 900
申请 Porkbun 的 Key: Getting started with the Porkbun API – Porkbun Knowledge Base ,文档: https://github.com/acmesh-official/acme.sh/wiki/dnsapi2#dns_porkbun
export PORKBUN_API_KEY="pk1_845261xhf01735da67a5543269845zxcnk5dd181651dvasjbvx1be0b215c96b96c"
export PORKBUN_SECRET_API_KEY="sk1_2fz5284asvbdfbcf38257d9kzv42616vzdfkljnfg6842f9zxv165aFK585"
acme.sh --issue --dns dns_porkbun -d vfly2.com
手动 DNS 验证申请证书,不能自动更新
执行下面命令,然后会生成相应的解析记录,只需要在域名管理面板中添加这条 txt 记录即可
acme.sh --issue --dns -d vfly2.com \
--yes-I-know-dns-manual-mode-enough-go-ahead-please
等待解析完成之后,重新生成证书(注意第二次这里用的是 --renew
):
acme.sh --renew -d vfly2.com \
--yes-I-know-dns-manual-mode-enough-go-ahead-please
其他
查看已安装证书信息
acme.sh --info -d example.com
取消自动续签
acme.sh --remove -d yourdomain.com
这个命令会删除 acme.sh 对该域名的自动续签设置,但不会删除已经生成的证书文件。如果你想要完全删除证书文件,你可以使用 --remove
命令的 --ecc
或 --force
选项。
原文链接: https://yanh.tech/2024/08/applying-certificates-with-acme.sh/
版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 技焉洲 (yanh.tech) 。
保持更新 ٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰恒益的实用技能,欢迎使用 RSS 订阅,如果能留言互动就更好了。
可在 Telegram 群组 https://t.me/vfly2 交流依文章步骤遇到的问题。