利用Cloudflare的DNS自动验证功能,申请泛域名证书

mandatory 2026-05-31 14:53 1

References


说明 · acmesh-official/acme.sh Wiki

dnsapi · acmesh-official/acme.sh Wiki — dnsapi · acmesh-official/acme.sh Wiki


前置条件



  1. 有服务器

  2. 有域名

  3. 域名设置到Cloudflare


优点



  1. 泛域名省事,nginx通配

  2. 自动延长证书有效期


设置DNS



准备CF_Zone_IDCF_Token


准备CF_Zone_ID


位置在对应域名的概述窗格下,cloudflare前端界面可能会改变,图片仅供参考。


准备CF_Token




select Zone -> DNS -> Edit, and under Zone Resources, only choose the domain we need.



大概像这样,确定后保存好 CF_Token


申请


安装acme


在服务器上,以Ubuntu为例。


sudo apt update

sudo apt install socat

curl https://get.acme.sh | sh -s [email protected]

source .bashrc

acme.sh -h

最后一步能显示,说明安装成功。


安装证书


export CF_Token="**************"
export CF_Zone_ID="*************"

# 申请证书
# zyhq.de换成自己的域名
acme.sh --issue --dns dns_cf -d zyhq.de -d '*.zyhq.de'

/etc/nginx/ssl 属主是 root, acme.sh 以用户zyhq运行,写不进去,需要把目录属主改成当前用户zyhq。


# zyhq换成自己的用户名
sudo chown -R zyhq:zyhq /etc/nginx/ssl

# 安装证书
# zyhq.de换成自己的域名
acme.sh --install-cert -d zyhq.de \
--key-file /etc/nginx/ssl/zyhqde_key.pem \
--fullchain-file /etc/nginx/ssl/zyhqde_cert.pem \
--reloadcmd "sudo service nginx reload"

以nginx为例,其余参考最上面的references.


完成。

最新回复 (19)
  • aooicom 05-31 14:55
    2

    这泛域名证书,要花钱买不得好几千啊

  • uman 05-31 14:57
    3

    不是可以申请15年的证书,跟这个有什么区别吗

  • an1xing 05-31 16:39
    4

    acme不是一直都支持泛域名吗?

  • tyue 05-31 17:44
    5

    好是挻好的,可惜只有90天,搞上自动续期就爽了

  • Tairitsu 05-31 17:49
    6

    那个是cf和源服务器之间的自签证书,不是用户和cf之间的

  • Tairitsu 05-31 17:50
    7

    我记得有好长一段时间caddy还有bug,caddy-cloudflare插件因为cf更新了token格式还没法用,不知道现在好了没

  • 八戒 05-31 17:50
    8

    为啥不用 lego 这个软件呢。有CF的api key就可以申请证书了,不用安装

  • 八戒 05-31 21:42
    9
  • 木鱼 05-31 22:57
    10

    1Panel上不是一直都有自动续签的免费证书

  • 城陌 05-31 22:59
    11

    自动续签应用挺多的挺方便了。。看到敲代码改代码我就打脑壳。。。

  • mandatory 楼主 05-31 23:31
    12

    代码总共个就没几行,更加轻量化。应用一般比较重,有哪些应用?我不了解。

  • mandatory 楼主 05-31 23:32
    13

    不用安装是什么意思?不安装nginx该怎么配置呢?

  • 城陌 05-31 23:46
    14

    如上面说的,我用1panel,里都有自带的证书续期,还有里面的应用商店里也有专门的证书管理应用。如果是宝塔的话我相信也有。


    有个服务器的装个面板啥都来了。。。


    佬,放弃手搓吧,这些基建都已经打好了的。。。

  • jqtmviyu 05-31 23:56
    15

    acme.sh 难用得一比. 还是lego简单, 用cron计划任务定时执行, 用钩子重启nginx就行了.

    什么1panel、宝塔之类的, 还得担心有漏洞被爬, 等续证书根本用不上那么重的.


    以前的 nginx manager 更是一坨.

  • Jason Smith 06-01 00:09
    16

    我也一直在用lego let’s 的证书。确实简单方便,而且支持的域名服务器够多

  • mandatory 楼主 06-01 00:22
    17

    我感觉区别不大,看了一下命令行量都差不多。实现方式和你说的一致,acme.sh具体是哪里难用的?

  • jqtmviyu 06-01 00:37
    18

    一个shell写的, 无论安装升级管理配置处理的麻烦的不行. 我还记得生成配置是放在用户目录下的一个.开头隐藏目录里, 文档是过时的gihub wiki

    一个是go写的可执行二进制, 安装升级更新都更简单, 配置是显式的, 文档也写得非常易懂


    我对 acme.sh 的印象之所以那么差, 还是有一次nas重新系统, 备份了配置和脚本后, 就没法跑起来了, 更新acme.sh也不行, 就是个散装的积木屋子, 根本不知道怎么排查是哪出了问题.


    像lego这种可执行二进制和显式配置, 我有把握换了设备还能运行.

  • mandatory 楼主 06-01 09:39
    19

    这么说 lego 确实好用,二进制和显示配置这点挺好。


    关于acme.sh有几处说法不太准确:acme.sh 的 wiki 一直在更新没有过时;配置放在 ~/.acme.sh/ 这种隐藏目录是惯例,不能算缺点吧;升级也有 --upgrade , --auto-upgrade 一键搞定。


    两个工具都挺好,Ubuntu我看只有snap, lego使用的话也得先安装go语言。

  • 旋律 06-01 09:49
    20

    觉得Persist方案更安全省事,这个还需要预防API TOKEN泄漏。


    DNS Persist 模式(持久化 DNS 验证,无 API 也能自动续签)


    如果你的 DNS 服务商没有 API,但你能编辑一次解析记录,DNS Persist 模式让你只添加一条长期有效的 TXT 记录,之后续签全程自动,不再需要每次改 DNS


    实现的是 IETF 草案 draft-ietf-acme-dns-persist-01

* 帖子来源Linux.do
返回