其实,免费多域泛域名证书是存在的,就比如说我现在就在用,全站通用ssl证书。这样做的好处就是,可以随便给站点增加域名而不用重新签证书。而且二级域名随便拿出一个都是https的pack页面。坏处也是有的,就是别人可以通过检测你的证书来获取你所有的域名。毕竟有付出才会有收获╮(╯▽╰)╭
要实现自动续期,你至少需要有一台服务器,虚拟空间是不行的。且如果要签泛域名证书的话证书中包含的域名的DNS解析不用全部放在同一个地方,比如几个域名用cloudflare管理解析记录,另外几个用DNSpod,这几个域名签进同一张泛域证书里,这样也是可以的。
acme.sh
接下来,切入正题,本文的主角是一个开源脚本—-acme.sh
视频教程在底部,以cloudflare做演示。
这是一个开源脚本,在GitHUb上能查到–> https://github.com/Neilpang/acme.sh/
也带了详细的中文说明–> https://github.com/Neilpang/acme.sh/wiki/说明
但自动DNS部分只有英文说明–>https://github.com/Neilpang/acme.sh/wiki/dnsapi
偷偷告诉你,某freessl.cn里面的那个一元的证书自动化就是用acme魔改的,还用的是特别老的acme,教程也不全,效率很低。
下面,我就总结一下怎么用acme签多域泛域名证书。
正文开始
目录
一、安装acme
window也能用,但以下只考虑Linux。
下载安装?
可以先安装一下依赖socat,其实不装也没什么影响
Centos:
yum install socat -y
Debian/Ubuntu:apt install socat -y
curl https://get.acme.sh | sh
国内主机可能无法访问GitHub,需要添加以下内容到/etc/hosts
52.69.186.44 github.com
151.101.64.133 raw.githubusercontent.com
如果以上信息失效的话,可以用这篇文章的工具寻找新的可用ip。
alias acme.sh=~/.acme.sh/acme.sh
这是通用的,所有主流的Linux都能用,Github英文页给了支持范围。
acme可以用命令手动更新
acme.sh --upgrade
也能开启自动更新
acme.sh --upgrade --auto-upgrade
二、使用(单DNS运营商)
acme是自动工作的,你签了证书之后,每60天就会帮你续期一次,你只要签好就行了。
①非泛域名多域名证书
如果你只是想普通地签多域名证书的话,可以直接用宝塔签,宝塔那个也是内置的acme签的证书。也能自己用acme(得自己装个新的,找到宝塔内置的acme在哪也行)。
acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com
也可以这样
acme.sh --issue -d mydomain.com,www.mydomain.com --webroot /home/wwwroot/mydomain.com
我比较喜欢第二种,加域名更方便。但旧版的acme可能不支持。
②泛域名多域证书
由于泛域名证书需要验证域名只能用DNS验证而不能用文件验证,所以需要配置好相关DNS API,目前支持:
CloudFlare、DNSPod、CloudXNS、GoDaddy、PowerDNS、OVH / kimsufi / soyoustart / runabove API、LuaDNS、DNSMadeEasy、Amazon Route53、Aliyun、ISPConfig 3.1、Alwaysdata、Linode、FreeDNS、cyon.ch、Domain-Offensive/Resellerinterface/Domainrobot、Gandi LiveDNS、Knot (knsupdate) DNS、DigitalOcean、ClouDNS、Infoblox、VSCALE、Dynu、DNSimple、NS1、DuckDNS、Name、Dyn Managed DNS、pdd.yandex.ru、Hurricane Electric、UnoEuro、INWX、Servercow、Namesilo、autoDNS (InternetX)、Azure DNS、selectel.com(selectel.ru)、zonomi、DreamHost、DirectAdmin 、KingHost DNS、Zilore DNS、Loopia、ACME DNS、TELE3、Euserv.eu、Google Cloud、ConoHa、netcup、GratisDNS、Namecheap、MyDNS……
以上只列举了一半,剩下的可以自己去GitHub查↓
以下以cloudflare和阿里云为例。
CloudFlare:
官方教程里有两种验证方式,一种是token,一种是key,key是有所有权限的,token是能限定权限范围的。自己用的话上key就好了,方便。
验证方法①-key:
export CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export CF_Email="xxxx@sss.com"
里面的CF_Email
就是你的账号,key按照下图步骤获取。
由于拥有了key就能完全控制你的账号(除了密码),所以要保护好你的key。
CF的api key
很好找,从控制面板首页进入My Profile
就能看到
验证方法②-token:
export CF_Token="xxxxxxxxxxx"
export CF_Account_ID="xxxxxxxxxxxxx"
创建token的地方就在获取key的地方的上面。
创建的token必须要有zone.zone的读取权限和zone.dns的编辑权限。如图所示。
账户ID在域名的Overview页面的下方的侧栏,我一开始也没找到……藏得也太深了
总的配置文件是/root/.acme.sh/account.conf
,所有的api信息都最终被储存在这里。
然后打开ssh,申请证书。
acme.sh --issue --dns dns_cf -d domain1.com,domain2.com,*.domain1.com,*.domain2.com --server https://acme-v02.api.letsencrypt.org/directory
配置正确的话,执行命令后就会自动完成证书签发续期了 ,生成的证书文件的路径会用绿字输出 ,每六十天会自动续期。注意,新转移到cf需要转移后等一天等DNS全球生效之后再配置。
阿里云:
阿里的key也能在控制台首页找到
export Ali_Key="xxxxxxxxxxxxxxx"
export Ali_Secret="xxxxxxxxxxxxxxx"
然后就能用shell创建证书了
acme.sh --issue --dns dns_ali -d domain1.com,domain2.com,*.domain1.com,*.domain2.com --server https://acme-v02.api.letsencrypt.org/directory
配置正确的话,执行命令后就会自动完成证书签发续期了,生成的证书文件的路径会用绿字输出 ,每六十天会自动续期。注意,新转移到阿里云或新购的域名需要转移后等一天等DNS全球生效之后再配置。
③alias模式(推荐)(对多域名多DNS运营商兼容好)
此部分为后补充,请结合本文与新文章一同食用。
新文章↓
三、其他使用小技巧&普通模式域名多DNS运营商怎么办
在创建完证书后,你可以通过
acme.sh --list
来查看证书列表。
当你要换服务器的时候,你只要在新的服务器装好acme,然后把整个证书文件夹(在/root/.acme.sh/
内,以第一个域名命名的文件夹)复制过去,就会在新的服务器继续自动续期。
如果你的域名不止在一个地方,但想放在一个证书里,那么你可以用多个--DNS -d
来区分DNS。比如我有个域名在cf,有个在dnspod,那么我可以在输出了key和id之后这样签证。
acme.sh --issue --dns dns_dp -d domain_in_dnspod.com,*.domain_in_dnspod.com --dns dns_cf -d domain_in_cf.com,*.domain_in_cf.com --server https://acme-v02.api.letsencrypt.org/directory
如果出现添加DNS出错的话,可以添加--debug
参数。加了之后错误会变少。如果还是出错的话,这个模式下会详细地列出每一个过程而不是直接显示结果。所以你可以根据出错位置进行判断和修复。