给你的域名申请一个泛域名证书吧
简介
你还在为个人域名的证书而烦恼嘛?试试 Let’s Encrypt 吧,它能提供免费的泛域名证书,让你的子域名都能有一个安全的小锁头,非常适合因国内云计算厂商 ssl 证书数量限制而困扰的小伙伴,快来试试吧。
先介绍一下这次主角:letsencrypt.org , 是一个免费的、自动化的、开放的证书颁发机构。截至 2018 年 9 月,它的全球 SSL 证书市场份额已超过 50%,得到主流浏览器和厂商的认可与支持。Let’s Encrypt 证书提供免费的申请,但每次申请到的 SSL 证书有效期只有 90 天,可以通过脚本实现提前自动续约达到自动化永久免费使用的目的。
利用 Let’s Encrypt 免费提供泛域名证书的申请,我们可以借助服务器脚本实现到期续签,自动刷新过期时间。
准备
一个域名
一台服务器(用于申请证书以及运行续签脚本)
本教程以申请 aqcoder.cn(腾讯云)以及 notifyou.top(阿里云)的泛域名证书为例
下载仓库
下载仓库:
1 | git clone https://github.com/acmesh-official/acme.sh.git |
下载仓库 (加速):
1 | git clone https://gitclone.com/github.com/acmesh-official/acme.sh.git |
上传 acme.sh
上传 acme.sh 到服务器 /root
目录,使用 root
用户执行后面的命令(acme.sh 也有说明可以使用其他用户运行,但为确保一些权限问题,先使用 root 用户运行成功,再尝试使用其他用户)。
执行安装命令
1 | sh acme.sh --install |
配置 SecretKey 和 SecretId
域名服务商申请 SecretId 和 SecretKey,阿里云的查看这里,腾讯云的查看这里
将上述的 SecretKey
和 SecretId
写到 ~/..bash_profile
,保存方法:https://github.com/acmesh-official/acme.sh/wiki/dnsapi
1 | # .bash_profile |
申请证书
1 | 腾讯云 |
出现错误是因为还没有通过 Let’s Encrypt 验证,而 Let’s Encrypt 提供两种方式验证,一个是 HTTP 文件验证,一个是 DNS-API 验证,这里推荐使用 DNS-API 验证
添加解析
阿里云添加 TXT 解析,位置:
腾讯云添加 TXT 解析,位置:
重新运行
稍等片刻重新运行,记得添加 --renew
参数
1 | 腾讯云 |
查看定时任务
1 | crontab -e |
可以看到,acme.sh 已经生成一个定时任务了
拷贝证书
1 | sh acme.sh --install-cert -d aqcoder.cn \ |
拷贝证书可以让 acme.sh 申请到的证书复制到指定目录,执行后拷贝证书的操作也会在定时任务中。
测试
添加解析
nginx 配置
aqcoder.cn
1 | #test.aqcoder.cn |
notifyou.top
1 | test.notifyou.top |
访问成功,出现 https 安全小锁头
结语
现如今计算云厂商对单域名证书的数量有着严格限制,这对于我的多子域名的需求极其不友好,一个免费泛域名证书可以完美解决,既省去了泛域名证书高昂的费用,也实现了自动化续期,达到无限期使用泛域名证书的目的,当然了,如果要使用在一些商用业务,建议还是购买云计算厂商的证书或者自建 CA,确保业务安全。
参考文章
Let’s Encrypt 免费泛域名 SSL 证书申请及自动续签
说起来我在 Vercel 上部署的博客,默认使用的也是 Let's Encrypt™
https://vercel.com/blog/automatic-ssl-with-vercel-lets-encrypt