带有 LetsEncrypt 的通配符 SSL 出现错误

Fco*_*der 8 domain-name-system ssl ssl-certificate txt-record lets-encrypt

我想通过 为我的网站创建通配符 SSL LetsEncrypt。我按照说明运行后Certbot,它给了我一个 DNS 挑战并说:

Please deploy a DNS TXT record under the name

_acme-challenge.db.example.com with the following value:
 jn324jr348r342bhr234hrou234nbr4324fj34r
Run Code Online (Sandbox Code Playgroud)

db.example.com 也在里面/etc/bind/

我所做的是打开db.example.com并在底线添加以下内容:

_acme-challenge.db.example.com 3600 IN TXT "jn324jr348r342bhr234hrou234nbr4324fj34r"
Run Code Online (Sandbox Code Playgroud)

但是当我像这样检查它时:

nslookup -type=TXT _acme-challenge.example.com
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

 - 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
Run Code Online (Sandbox Code Playgroud)

当我运行 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
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

小智 10

请注意,您必须等待一段时间,直到您的 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 中留下一个命令来免费更新通配符证书,如下所示:

0  1   20 * *   root    certbot certonly --non-interactive -d example.com -d '*.example.com' --dns-cloudflare --dns-cloudflare-credentials /my/secret/api/key/location
Run Code Online (Sandbox Code Playgroud)

  • “请注意,您必须等待一段时间,直到您的 DNS 区域的更改将在全球服务器上更新。”事实并非如此。没有传播更新是(应该)在权威名称服务器上立即进行的。递归的将在执行查询后更新,而不是自动更新。如果他们在更改之前进行了查询,那么他们至少会保留与记录关联的 TTL 值的先前数据。 (2认同)

jca*_*ron 7

请注意,在区域文件中,不以点结尾的名称.是相对的,通常与当前域相关。

所以_acme-challenge.db.example.com区域内的db.example.com条目实际上意味着一个条目_acme-challenge.db.example.com.db.example.com.

为确保输入正确,您可以:

  • 在末尾添加一个点: _acme-challenge.db.example.com.

  • 或者不包括域: _acme-challenge

这是基于用于的区域db.example.com,如果区域用于example.com代替,情况会略有不同。

另外不要忘记更新区域的序列(在 SOA 记录中),并重新加载区域。

这当然基于为您的域注册的名称服务器是您自己的服务器(和辅助服务器)。

查询时使用nslookup或者dig您可以告诉他们从哪个服务器询问答案。始终首先检查您的主要服务器,然后是您的辅助服务器,然后是其他服务器。并且不要忘记某些类型的更新可能需要一段时间(特别是受先前记录的 TTL 影响的更改,以及受域的负缓存 TTL 影响的添加)。