为什么通配符 DNS 条目解析为单一主机名?

为什么通配符 DNS 条目解析为单一主机名?

我正在尝试使用 certbot 更新我的 letsencrypt 通配符证书,但我注意到它在运行命令时表现得很奇怪。它说它会添加一个子域名并删除通配符,如下所示:

You are updating certificate example.org to include new domain(s):
+ oma.example.org

You are also removing previously included domain(s):
- *.example.org

由于这显然是错误的,不应该发生,我开始寻找问题可能出在哪里。我很快注意到,出于某种原因,当我尝试解析通配符的主机名时,它反而认为我正在解析单个主机 oma.example.org 的主机名,如下所示:

tuki@*****:~$ host *.example.org
oma.example.org has address ***.***.***.***

使用 dig 时,它看起来像这样:

tuki@*******:~$ dig *.example.org

; <<>> DiG 9.11.3-1ubuntu1.17-Ubuntu <<>> oma.example.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42845
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;oma.example.org.                    IN      A

;; ANSWER SECTION:
oma.example.org.             194     IN      A       ***.***.***.***

;; Query time: 0 msec
;; SERVER: 192.168.1.8#53(192.168.1.8)
;; WHEN: Mon Jun 20 12:59:04 EEST 2022
;; MSG SIZE  rcvd: 55

为什么我的服务器将通配符指示符更改为主机名?它甚至不是主机自己的名称,而是完全不相关的主机。我检查了 /etc/hosts 文件,但没有指向通配符或特定主机“oma”的任何内容。查询正确地发送到我们的内部 DNS 服务器,但由于它请求了错误的主机,因此它收到了错误的答案。

我如何告诉系统通配符应该是一个通配符而不是一些不相关的主机?

提前感谢您提供的任何帮助!

编辑:我将在这里包含我的 /etc/os-release 以获取更多信息。

NAME="Ubuntu"
VERSION="18.04.5 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.5 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

编辑2:这是我尝试用来创建通配符证书的命令:

 sudo certbot certonly --manual --preferred-challenges dns --cert-name example.org -d *.example.org

编辑3:解决方案:

看起来我只需要将域名括在单引号中即可实现这一点。显然,这是让 certbot 相信域名表面意思的一种方法。

sudo certbot certonly --manual --preferred-challenges dns --cert-name example.org -d '*.example.org'

答案1

主机名oma.example.org属于通配符*.example.org。从技术上讲,可以制作一个包含冗余值的 SAN 字段证书DNS:*.example.org, DNS:oma.example.org,但这是没有意义的,因为特定主机名已经被通配符覆盖,因此即使您从 SAN 值中省略其明确声明,证书对该主机名也同样有效。

Let's Encrypt 更进一步,他们甚至不允许这样做;因此它声明*.example.orgoma.example.org是互斥的,并且您将删除通配符。如果您对某个域有通配符,则不应在该域内指定单个主机名。

这与 DNS 无关,也没有任何共同之处。DNS 中没有“在线”通配符。DNS 中的通配符只是避免编写脚本答案的方法,或者可以将其视为简单的合成记录生成器。

例如,当您询问某个名称时,无论该名称在服务器上的配置方式如何oma.example.net,您都会得到该名称的答案oma.example.net。此外,无法确定您的名称是否以特定方式得到回答,因为它属于某个通配符,它​​是明确设置的,还是答案是由某个脚本生成的;您的 DNS 客户端收到的答案在任何情况下看起来都完全相同。

答案2

在这种情况下,我需要将域名括在单引号中,以便让 certbot 按其表面意义接受它,而不尝试解析它。

在这种情况下,我最终格式化命令的方法如下:

sudo certbot certonly --manual --preferred-challenges dns --cert-name example.org -d '*.example.org'

相关内容