acme+cloudflare生成免费证书(自动续期)

acme DNSapi

acme DNSapi的作用是在申请证书时使用dns校验,acme可以通过dnsapi在对应的dns管理平台提交对应的dns记录。玩过证书的朋友都知道,证书申请时有三种验证方式

  • 邮箱验证:需要邮箱与域名绑定(细节要求我没试过)
  • 文件验证:文件验证时证书管理方会要求你在服务器的指定路径上放一个指定文件(内容也是他们定),然后开放80端口,他们会去下载这个文件从而验证你的身份。申请证书时你需要去你的服务器上操作,还要开放指定端口
  • DNS验证:DNS验证只需要你在dns记录上添加一条TXT记录就可以

我们这里用到的就是DNS验证,DNS验证虽然方便,但是每次申请都需要添加一条DNS记录(申请完成后可以删除,acme好像自动帮忙删除了),如果要实现自动化,acme需要有权限向dns记录方提交记录。

cloudflare DNSapi

acme dns api doce

根据上面的文档可以看到cloudflare dns api 有两种方式获取

  • 生成cloudflare的全局token(全局token拥有cloudflare的所有权限,大部分是acme用不到的)
  • 生成cloudflare的DNS权限token(推荐,够acme用的了)

生成cloudflare的DNS权限token

先来cloudflare的Api申请页面

image-20240923085901516

点击这里的创建令牌

选择编辑区域DNS 这个模板(一般来说是第一个)

image-20240923085941855

按照下面的内容填写

image-20240923090119372

权限选 区域 -> DNS -> 编辑

区域资源 包括 -> 特定区域 -> 在下拉列表里选你的域名(你也可以在第二个框里面选择所有区域

剩下都不变,点继续,跳转到这个页面

image-20240923090358443

点击生成令牌,就会产生一个令牌,令牌生成后第一时间记录下来,这个令牌只显示一次,刷新页面后就看不到了

获取cloudflare的用户信息

点到cloudflare中对应的网页管理页面,在api的地方可以看到两个ID

image-20240923090719587

现在我们有三个信息

  • 上面生成的一个管理DNS的TOKEN
  • 这里的区域ID
  • 这里的账户ID

在对应服务器上生成证书

设置环境变量


   
   
export CF_Token="填DNS token"
export CF_Zone_ID="填区域ID"
export CF_Account_ID="填账户ID"

安装acme


   
   
apt update -y #更新系统
apt install -y curl #安装curl
apt install -y socat #安装socat
curl https://get.acme.sh | sh

生成证书


   
   
acme.sh --issue --dns dns_cf -d test.fun -d "*.test.fun"

如果说找不到acme.sh,可以使用下面的命令


   
   
~/.acme.sh/acme.sh --issue --dns dns_cf -d test.fun -d "*.test.fun"

等他跑码,会告诉你证书的位置

image-20240923092443069

关键是上面两行your cert, your cert key

上面生成的证书是 *.test.fun 的证书,所有的以test.fun结尾的域名都可以用这个证书

推荐的使用方案: 因为acme正常2个月会自动更新一下证书,所以我不推荐你把证书移动到别的位置,因为acme下次生成的时候还会放在这个位置,要么你指定acme的证书生成路径,可以用acme.sh --help 查看怎么指定路径。我使用的方法是(有两个)

  • 直接使用这个路径

  • 通过软连接把证书链接过去

    比如我要把证书放在/etc/nginx/ssl 里面 分别命名为cert.crt priv.key我可以这样做

    
          
          
    cd /etc/naginx/ssl
    ln -s /home/ivhu/.acme.sh/证书路径.cer cert.crt
    ln -s /home/ivhu/acme.sh/证书私钥.key priv.key

证书生成后一般会新建一个cron 的定时认为用来维护证书保证期

可以通过 crontab -e命令查看,我的结果是这样的:

image-20240923091717497

意思是每天凌晨3:28会检查一下证书

如果你的证书是给nginx用的可以在root用户下运行crontab -e 编辑root用户的cron自动化命令

添加如下:


   
   
0 4 * * * systemctl reload nginx

表示每天4:00 重启nginx ,因为nginx的证书需要重启之后才能重载

原创作者: blogforeverything 转载于: https://www.cnblogs.com/blogforeverything/p/18426804
### 使用 Let's Encrypt 在 MacOS 上为泛域名创建免费 SSL 证书 #### 安装 Certbot 和依赖项 为了在 MacOS 上使用 Let's Encrypt 创建泛域名 SSL 证书,首先需要安装 Certbot 及其 DNS 插件。Certbot 是一个用于自动化管理 Let's Encrypt 证书的工具。 可以通过 Homebrew 来轻松安装这些组件: ```bash brew install certbot brew install certbot-dns-cloudflare ``` 如果使用其他DNS提供商,则应相应地替换 `certbot-dns-cloudflare` 为对应的插件名称[^2]。 #### 配置环境变量 对于大多数DNS服务来说,在运行 Certbot 命令之前设置API密钥作为环境变量是非常重要的。假设正在使用 Cloudflare 的话: ```bash export CLOUDFLARE_EMAIL="your_email@example.com" export CLOUDFLARE_API_KEY="your_api_key_here" ``` 请确保将上述命令中的占位符替换成实际值[^3]。 #### 执行 Certbot 命令请求证书 准备好之后就可以执行如下命令来申请通配符证书了: ```bash sudo certbot certonly \ --dns-cloudflare \ --dns-cloudflare-propagation-seconds 120 \ -d "*.example.com" \ --server https://acme-v02.api.letsencrypt.org/directory ``` 这里 `-d "*.example.com"` 表明要为整个 example.com 下的所有子域生成一张通配符证书;而 `--dns-cloudflare` 参数指定了使用的验证方法是基于DNS挑战响应的方式来进行身份确认[^4]。 成功后,证书文件将会被保存到 `/etc/letsencrypt/live/example.com/` 目录下。 #### 自动化更新机制 Let's Encrypt 发放的证书有效期只有90天,因此建议设定定期任务来自动处理续期操作。可以利用 cron 或者 systemd timer 实现这一点。例如添加一条每周定时检查并尝试续约的任务至 crontab 中: ```bash crontab -e # 添加下面这行以实现每星期日凌晨两点钟自动检测并可能更新证书 0 2 * * 0 /usr/local/bin/certbot renew >> /var/log/le-renew.log ``` 这样就完成了在 MacOS 平台上针对泛域名的 Let's Encrypt SSL 证书的创建流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值