方块糖的工坊
方块糖的工坊

使用acme.sh申请泛域名证书

背景

目前国内主流的免费证书都已经改为3个月有效期,而且基本都不支持泛域名证书,像我这样有多个二级域名的博主,每3个月就要重新申请替换一遍,真是想想就麻烦,调研了下发现有很多成熟的软件能够实现免费且全自动的证书申请,甚至证书自动续期。

acme.sh 是一个开源的,实现 ACME 客户端协议的纯 Unix shell 脚本,提供颁发、安装和自动更新证书、邮件通知等功能。 随着作者不断更新,未来将支持更多 CA,目前已经支持 CA 如下:

安装

curl https://get.acme.sh | sh
source ~/.bashrc
https://cdn.guitang.fun/Blog/acme_image.png

查看版本

https://cdn.guitang.fun/Blog/acme_image%201.png

申请证书

目前 acme.sh 支持 5 个正式环境 CA,分别是 Let’s EncryptBuypassZeroSSLSSL.com 和 Google Public CA,默认使用 ZeroSSL。

我一开始使用的就是默认的ZeroSSL,但最后一直卡在Order status is 'processing', let's sleep and retry

所以我这里切换到了Let’s Encrypt

acme.sh --set-default-ca --server letsencrypt

官方提供的域名所有权认证方式有两种:

  • HTTP 模式,需要在你的网站根目录下放置一个文件, 来验证你的域名所有权。
  • DNS 模式,手动或使用 DNS 解析服务商提供的 api 添加 txt 解析记录验证域名所有权。

泛域名证书的解析目前仅支持 DNS 方式验证,我这里使用 DNS API 模式来验证域名所有权

DNS API 模式(推荐,支持泛域名)

这种方式会使用域名服务商提供的 api 自动为你的域名添加一条 txt 解析,验证成功后, 这条解析记录会被删除,大概需要等待 1、2 分钟 等待 DNS 解析。

进入腾讯云,点击创建密钥,生成一个随机的 IDToken

https://cdn.guitang.fun/Blog/acme_image%202.png

将获取到的密钥配置到环境变量

# 腾讯云是DP_Id和DP_Key,如果是阿里则分别为Ali_Key和Ali_Secret
export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"

执行如下命令开始申请

其中 dns_dp 是指腾讯的DNSPOD,如果你的域名托管在阿里就要改成dns_ali
*.guitang.fun 换成你的泛域名即可
一定要设置两个域名,一个是*.域名,另外一个是域名,按照代码命令设置,切记!

acme.sh --dns dns_dp --issue -d *.guitang.fun -d guitang.fun
https://cdn.guitang.fun/Blog/acme_image%203.png

安装证书

生成的证书默认都放在安装目录下: ~/.acme.sh, 请不要直接使用此目录下的证书文件, 它们仅供内部使用,文件夹结构将来可能会更改。 例如: 不要直接在 nginx 的配置文件引用这个目录的证书文件

acme.sh --install-cert -d *.guitang.fun \
--key-file /home/soc/blog/conf.d/guitang.fun_acme/*.guitang.fun.key \
--fullchain-file /home/soc/blog/conf.d/guitang.fun_acme/fullchain.pem \
--reloadcmd "docker restart nginx"

把“*.guitang.fun”替换成刚刚您自己申请的泛域名,再把“*.guitang.fun.key”换成刚刚生成的SSL证书密钥文件,fullchain.cer不需要替换了,默认生成的就是这个。

https://cdn.guitang.fun/Blog/acme_image%204.png

进目录看下文件是否正确拷贝过去了

https://cdn.guitang.fun/Blog/acme_image%205.png

配置服务器

然后就是把你使用证书的地方配置一下,我这里是nginx

https://cdn.guitang.fun/Blog/acme_image%206.png

刷新网站,验证效果

https://cdn.guitang.fun/Blog/acme_image%207.png

安装七牛云证书

博客的图片是托管在七牛云上的,acme.sh也提供了支持,参考官网文档部署

export QINIU_AK="PXjgvwDJ***"
export QINIU_SK="PN9Ujc***"
# 泛域名的话要加这个配置,官网上说要有. 但我实际部署的时候没加 
export QINIU_CDN_DOMAIN="cdn.guitang.fun"
acme.sh --deploy -d *.guitang.fun --deploy-hook qiniu
https://cdn.guitang.fun/Blog/acme_image%208.png

最后虽然报错了,但去七牛云-证书管理页面,发现证书已经传上去了

https://cdn.guitang.fun/Blog/acme_image%209.png

点击部署按钮

https://cdn.guitang.fun/Blog/acme_image%2010.png

浏览器刷新图片,发现已经ok了

https://cdn.guitang.fun/Blog/acme_image%2011.png

参考

使用acme.sh申请泛域名证书

利用acme.sh申请 ZeroSSL 泛域名证书的图文教程

acme自动申请/更新证书并部署nginx,七牛

发表回复

textsms
account_circle
email

方块糖的工坊

使用acme.sh申请泛域名证书
目前国内主流的免费证书都已经改为3个月有效期,而且基本都不支持泛域名证书,像我这样有多个二级域名的博主,每3个月就要重新申请替换一遍,真是想想就麻烦
扫描二维码继续阅读
2024-09-18