使用 acme.sh 申请和自动更新证书的完整指南

本文重在 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)

简易快速步骤

  1. 使用 root: sudo -i
  2. 安装并启用 acme.sh 脚本,记得改邮箱(安装地址是在 /root/.acme.sh/acme.sh)
apt install -y curl && \
curl https://get.acme.sh | sh -s email=vgamebox@outlook.com && \
source ~/.bashrc
  1. (可选)切换证书签发机构
acme.sh --set-default-ca --server letsencrypt
  1. 签发证书,根据情况有多种选择

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

  1. 安装证书
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 浏览器需要的所有证书,比如根证书和中间证书,但不包括服务端证书
  1. 开启 acme.sh 自动升级
acme.sh --upgrade --auto-upgrade

如果没能自动更新,重复执行前面的申请证书命令即可,如果证书未过期需要加 -f 强制更新

  1. 在 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 交流依文章步骤遇到的问题。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇