文章目录
- 1、简介
- 2、选择一个 DNS 服务商
- 2.1、CloudFlare
- 2.2、DigitalOcean
- 2.3、Linode
- 2.4、OVH
- 3、选择一个域名代管方法
- 4、示例
- 4.1、设置 NS 代管
- 4.2、设置 CNAME 转发
- 4.3、使用 acme.sh 申请 Let’s Encrypt 通配符证书
如何使用 acme.sh 生成 Let’s Encrypt 通配符证书,而 DNS 认证签发证书一直是一个麻烦事。例如需要将 API Key 甚至是账号密码与签发脚本保存在一起,会有潜在的安全隐患;有些 DNS 服务商不提供 API,只能每三个月手工修改等等。
本文主要介绍了一种折衷的方法,将 ACME 认证域名单独托管至支持 API 的 DNS 服务商。即使 API Key 泄露,攻击者也无法篡改网站的其它 DNS 记录。
2、选择一个 DNS 服务商
2.1、CloudFlare
CloudFlare 提供免费的 DNS 和 CDN 服务,无需认证即可开通
- 价格:免费
- API:有
- API 安全性:中
- 时效:高,5秒内生效
- 推荐度:五星
你可以在这个页面获取 API Key
2.2、DigitalOcean
DigitalOcean 是一家老牌云计算服务商,同时也提供免费的 DNS 托管服务。在其管理平台上可以随时生成或注销 API Key,以便于保护账号的安全。DigitalOcean 的免费 DNS 托管服务需要进行支付认证方可开通。绑定信用卡或 PayPal 即可完成支付认证。
- 价格:免费
- API:有
- API 安全性:中
- 时效:高,5秒内生效
- 推荐度:五星
你可以在这个页面获取 API Key
2.3、Linode
Linode 也是一家老牌云计算服务商,同时也提供免费的 DNS 托管服务。在其管理平台上可以随时生成或注销 API Key,以便于保护账号的安全。Linode 独特的子账号功能,可以为自己开设低权限的子账号,然后在子账号中生成 API,保护主账号下服务器等数据的安全。Linode 的免费 DNS 托管服务需要进行支付认证方可开通。
值得注意的是,Linode DNS 的生效时间大约为 15 分钟,因此每次进行域名认证都要花费不少时间。
- 价格:免费
- API:有
- API 安全性:高
- 时效:低,15-20 分钟生效
- 推荐度:四星
你可以在这个页面获取 API Key
2.4、OVH
OVH 也是一家老牌云计算服务商,成立于1999年,在提供独立服务器和云计算服务的同时也提供免费的 DNS 托管服务。在其管理平台上可以随时生成 API Token,但是注销 API Token 相当繁琐。OVH 账号需要先通过身份验证才能添加域名解析,需要上传身份证件和地址证明,比较适合已经有账号的朋友使用。
- 价格:免费
- API:有
- API 安全性:高
- 时效:高
- 推荐度:四星
不推荐任何国内厂商,比如某 NS,某 Pod ,因为他们 DNS 服务器在国内,从而会容易导致 Let’s Encrypt 的认证服务器请求超时
3、选择一个域名代管方法
常用的域名代管包括 NS 代管和 CNAME 转发。无论如何,在 DNS 托管平台上,至少要有一个 NS 代管子域名。其他域名的认证纪录则可以用 CNAME 转发到这个代管域名上。
4、示例
本例采用的方法是 NS 代管一个任意子域名,然后利用 CNAME 转发 ACME 挑战子域名。
你也可以选择直接将 ACME 挑战子域名用 NS 代管至其他域名托管服务,做法类似,不再赘述。
本例假设你拥有两个域名 example.com
和 example.org
,现在希望将 acme.example.com
转交由 DigitalOcean 域名托管服务代管,并将两个域名的 ACME 挑战子域名转发至这个子域名。
4.1、设置 NS 代管
我们以 DigitalOcean 为例
- 访问 DigitalOcean 的域名设置中心: https://cloud.digitalocean.com/networking/domains
- 添加域名
acme.example.com
- 访问你自己域名的设置中心
- 添加三条 NS 记录并等待其生效:
NS acme.example.com ns1.digitalocean.com. 1800
NS acme.example.com ns2.digitalocean.com. 1800
NS acme.example.com ns3.digitalocean.com. 1800
4.2、设置 CNAME 转发
- 访问你自己域名的设置中心
- 为每个要转发的域名添加 CNAME 转发记录并等待其生效:
CNAME _acme-challenge.example.com acme.example.com. 1800
CNAME _acme-challenge.example.org acme.example.com. 1800
4.3、使用 acme.sh 申请 Let’s Encrypt 通配符证书
先设定 API Key 变量为你自己申请的 API Key。
export DO_API_KEY=blablablablabla 你的一长串 API Key
如需其他的 DNS ,请修改 DO_API_KEY 为对应的 API 名称,详见 acme.sh/dnsapi
接着根据你的实际需要,执行以下命令,为这些域名签署证书。
4 个域名在同一张证书:
acme.sh --dns dns_dgon --issue -d example.com -d \*.example.com -d example.org -d \*.example.org --domain-alias @.acme.example.com
如需其他的 DNS ,请修改 dns_dgo 为对应的 API 名称,详见 acme.sh/dnsapi
2 个同根域名在同一张证书,共两张:
acme.sh --dns dns_dgon --issue -d example.com -d \*.example.com --domain-alias @.acme.example.com
acme.sh --dns dns_dgon --issue -d example.org -d \*.example.org --domain-alias @.acme.example.com
不包含根域名,只包含通配符域名的证书,共两张:
acme.sh --dns dns_dgon --issue -d \*.example.com --domain-alias @.acme.example.com
acme.sh --dns dns_dgon --issue -d \*.example.org --domain-alias @.acme.example.com
评论 (0)