SSL证书Let's Encrypt自动申请脚本 ,对接域名解析商支持免费泛域名
SSL证书Let's Encrypt自动申请脚本 ,对接域名解析商支持免费泛域名
home againLet’s Encrypt虽说是一个免费项目,但它由Linux基金会托管,Mozilla、思科、Akamai、IdenTrust 和EFF等组织发起,后有Facebook等大佬加入,颁发的证书的权威性和可靠性就不用多说了。不仅免费还支持泛域名简直不能再爱了❥(^_-)。
Let’s Encrypt证书一开始比较难用繁琐,然后推出了certbot工具实现了一键申请证书、自动部署Nginx、Apache、到期自动续期等功能,易用性大大提高。众所周知申请证书之前需要安装域名所有权,这有两种方式:
- html文件验证
- 域名TXT验证
第一种html验证需要先去域名解析商把域名解析到网站ip,手头没有现成网站就只能采取第二种TXT验证,就需要去域名解析商添加随机指定的TXT记录。两种方式都要经过域名解析商,输入密码登录然后添加解析也算是较为繁琐的步骤。这里介绍acme.sh脚本,可以直接对接你的域名服务商无需登录手动添加解析,实现了比certbot还要”一键“的一键脚本。
Let’s Encrypt证书被国外广泛接受,但是我们国内好像不太认可。360这玩意竟然在360浏览器里直接把Let’s Encrypt证书标记为不信任,但对亚洲诚信TRUSTAsia证书放行;国外正好相反,不信任TRUSTAsia但完全信任Let’s Encrypt。所以国内建站Let‘s Encrypt还是要考虑一下。
安装
一句话命令
curl https://get.acme.sh | sh |
此命令一共做了两件事:
把acme.sh脚本存放到了你当前用户目录下的.acme.sh目录下
~/.acme.sh/
然后创建了一个别名alias,你可以在任何地方直接调用acme.sh脚本
alias acme.sh=~/.acme.sh/acme.sh
创建了一个定时任务crontab,每天00:00自动检测所有证书,快到期的证书自动续签。
此脚本的所有的修改都限制在安装目录中: ~/.acme.sh/
生成证书
html和TXT两种方式都支持。
html验证
acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/ |
-d参数指定申请证书的域名,可以指定多个。–webroot参数指定域名对应网站的根目录。acme.sh 会在根目录下全自动生成验证文件以验证网站所有权,完成验证后自动删除验证文件。
acme.sh --issue -d mydomain.com --apache |
如果你的web服务器是apache,那么使用–apache参数无需指定网站根目录。
acme.sh --issue -d mydomain.com --nginx |
效果同上,web服务器是nginx。
acme.sh --issue -d mydomain.com --standalone |
如果你没有安装运行任何web服务,使用–standalone参数可以帮助你临时创建一个web服务以帮助你完成验证。
TXT验证
TXT验证分为两种,手动和自动,这里讨论自动为主,手动略写。
手动TXT
acme.sh --issue --dns -d mydomain.com
使用–dns参数指定用dns方式——即TXT验证,acme.sh 会生成一条解析记录显示出来, 把解析添加到域名 txt 记录里,然后重新生成证书:
acme.sh --renew -d mydomain.com
自动TXT
以腾讯云dnspod为例:
登录dnspod生成api id和api key,然后导入系统配置export DP_Id="你的api id"
export DP_Key="你的api key"导入后直接开始申请
acme.sh --issue --dns dns_dp -d aa.com -d www.aa.com
使用–dns参数指定域名解析商,dns_dp指的是腾讯云。-d参数指定申请证书的域名。此命令会自动在你腾讯云处的域名下生成TXT解析以完成验证,完成验证后自动删除TXT解析并完成证书申请。Let’s Encrypt证书有效期为3个月,在证书快要到期时自动续期,完全的自动化,nice!
域名解析商导入方法
放几个常用的域名解析商的api生成地址和要导入的变量名:
- CloudFlare
CloudFlare只有api key,api id就是你注册的邮箱了。获取你的CloudFlare的api keyexport CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export CF_Email="xxxx@sss.com"
acme.sh --issue --dns dns_cf -d example.com -d www.example.com - DnsPod
腾讯云的dns解析。3、GoDaddyexport DP_Id="1234"
export DP_Key="sADDsdasdgdsf"
acme.sh --issue --dns dns_dp -d example.com -d www.example.com
GoDaddy的api id和api key申请地址:这里export GD_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export GD_Secret="asdfsdafdsfdsfdsfdsfdsafd"
acme.sh --issue --dns dns_gd -d example.com -d www.example.com - Amazon
Amazon的dns解析叫做Route53,查看这篇文章以获取Route53的api id和api key:如何获取Route53的apiexport AWS_ACCESS_KEY_ID=XXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXX
acme.sh --issue --dns dns_aws -d example.com -d www.example.com - Aliyun
阿里云的dns解析,获取api id和api key:这里export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"
acme.sh --issue --dns dns_ali -d example.com -d www.example.com - name.com
获取name.com的api key:这里,无需api id是你的用户名。export Namecom_Username="testuser"
export Namecom_Token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
acme.sh --issue --dns dns_namecom -d example.com -d www.example.com - 华为dns
华为无需api id和api key,需要的是账号的用户名、密码和ProjectID,projectID在这里找到。acme.sh支持100多种域名商接入,更多接入方式看:这里export HUAWEICLOUD_Username=<Your Username> # Usually hwxxxxxx
export HUAWEICLOUD_Password=<Your Password>
export HUAWEICLOUD_ProjectID=<A Project ID>
./acme.sh --issue --dns dns_huaweicloud -d example.com -d www.example.com
泛域名证书
-d参数后接域名*.example.com,就能申请example.com的泛域名证书啦。
泛域名证书只能支持“泛一级域名”,也就是说*.example.com证书支持形如:a.example.com、b.example.com、c.example.com,但是无法支持a.a.example.com、b.a.example.com这样再多一级或者多级域名。