我想通过为我的网站创建通配符 SSL LetsEncrypt
。我按照说明运行后Certbot
,它给了我一个 DNS 挑战,并说:
Please deploy a DNS TXT record under the name
_acme-challenge.db.example.com with the following value:
jn324jr348r342bhr234hrou234nbr4324fj34r
db.example.com 也在里面/etc/bind/
。
我所做的是打开db.example.com
并在底线添加以下内容:
_acme-challenge.db.example.com 3600 IN TXT "jn324jr348r342bhr234hrou234nbr4324fj34r"
但是当我这样检查时:
nslookup -type=TXT _acme-challenge.example.com
它给了我这个错误:
- The following errors were reported by the server:
Domain: db.example.com
Type: dns
Detail: DNS problem: NXDOMAIN looking up TXT for
_acme-challenge.db.example.com - check that a DNS record
exists for this domain
ubuntu@me-1:/etc/bind$ nslookup -type=TXT _acme-challenge.example.com
Server: 127.0.0.53
Address: 127.0.0.53#53
** server can't find _acme-challenge.example.com: NXDOMAIN
当我运行 Certbot 时也会出现错误:
Some challenges have failed.
IMPORTANT NOTES:
- The following errors were reported by the server:
Domain: db.example.com
Type: dns
Detail: DNS problem: NXDOMAIN looking up TXT for
_acme-challenge.db.example.com - check that a DNS record
exists for this domain
我在这里做错了什么?
请注意,您必须等待一段时间,直到您的 DNS 区域中的更改将在全球服务器上更新。您的问题是您正在尝试检查更改是否太快地应用于 DNS。这种情况有一个很好的解决方法,它需要使用 DNS 提供商的 API。如果您使用例如 OVH,您可以使用他们的 API 进行 DNS 更改,并且 certbot 将能够立即检查更改。这里有所有 API 插件的列表: https ://certbot.eff.org/docs/using.html?highlight=dns#dns-plugins
如果您的 DNS 提供商不支持此操作,请尝试将您的 DNS 区域移动到 Cloudflare。这非常简单,您将免费获得该服务。此外,通过使用 DNS API,您可以通过在 cron 中留下一个命令来免费更新通配符证书,如下所示:
请注意,在区域文件中,不以点结尾的名称
.
是相对的,通常与当前域相关。因此
_acme-challenge.db.example.com
,区域内的db.example.com
条目实际上意味着_acme-challenge.db.example.com.db.example.com.
为确保您有正确的条目,您可以:
在末尾添加一个点:
_acme-challenge.db.example.com.
或不包括域:
_acme-challenge
这是基于 for 的区域,如果是 for 的区域
db.example.com
,情况会略有不同example.com
。另外不要忘记在更新区域时更新区域的序列号(在 SOA 记录中),然后重新加载区域。
这当然是基于您的域的注册名称服务器是您自己的服务器(和辅助服务器)。
查询时使用
nslookup
ordig
您可以告诉他们从哪个服务器询问答案。始终首先检查您的主服务器,然后是您的辅助服务器,然后是其他服务器。并且不要忘记某些类型的更新可能需要一段时间(特别是受先前记录的 TTL 影响的更改,以及受域的负缓存 TTL 影响的添加)。