如何使用 Traefik 的 dnsChallange 获取 "www.*.example.org" 的证书?
How to get certificate for "www.*.example.org" with Traefik's dnsChallange?
使用下面的配置,颁发的证书适用于 www.example.org
和 abc.example.org
。但不适用于 www.abc.example.org
。
http:
routers:
web-router:
rule: "Host(`example.org`) ||
Host(`www.example.org`) ||
HostRegexp(`{subdomain:[a-z-]+}.example.org`) ||
HostRegexp(`www.{subdomain:[a-z-]+}.example.org`)"
entryPoints:
- web
middlewares:
- redirect
- csrf
service: django
web-secure-router:
rule: "Host(`example.org`) ||
Host(`www.example.org`) ||
HostRegexp(`{subdomain:[a-z-]+}.example.org`) ||
HostRegexp(`www.{subdomain:[a-z-]+}.example.org`)"
entryPoints:
- web-secure
middlewares:
- csrf
service: django
tls:
certResolver: letsencrypt
domains:
- main: "*.example.org"
sans:
- "example.org"
certificatesResolvers:
letsencrypt:
acme:
email: "email@example.com"
storage: /etc/traefik/acme/acme.json
dnsChallenge:
provider: route53
delayBeforeCheck: 0
在 DNS 中,我有 example.org
和 *.example.org
的 A
记录。
是否可以同时获得适用于 www.*.example.org
和 *.example.org
的证书?
LetsEncrypt 不使用嵌套通配符。您可以获得 *.example.org
或 *.sub.example.org
的证书,但 *.example.org
在 *
.
的定义中不包含 .
此外,DNS 本身不支持嵌套或嵌入的通配符。
如果您为 www.*.example.com
创建一条记录,然后查询 www.foo.example.com
之类的内容,就可以看到这一点。您将收到 NXDOMAIN 响应。如果您查询 www.\*.example.com
(或将 FQDN 括在单引号中以避免 shell 扩展),那么您将获得您创建的 A 记录。当星号不在记录的开头时,星号将变为文字字符。
➤ host www.sub.productionwebsite.com 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:
Host www.sub.productionwebsite.com not found: 3(NXDOMAIN)
~
➤ host 'www.*.productionwebsite.com' 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:
www.*.productionwebsite.com has address 10.68.0.73
使用下面的配置,颁发的证书适用于 www.example.org
和 abc.example.org
。但不适用于 www.abc.example.org
。
http:
routers:
web-router:
rule: "Host(`example.org`) ||
Host(`www.example.org`) ||
HostRegexp(`{subdomain:[a-z-]+}.example.org`) ||
HostRegexp(`www.{subdomain:[a-z-]+}.example.org`)"
entryPoints:
- web
middlewares:
- redirect
- csrf
service: django
web-secure-router:
rule: "Host(`example.org`) ||
Host(`www.example.org`) ||
HostRegexp(`{subdomain:[a-z-]+}.example.org`) ||
HostRegexp(`www.{subdomain:[a-z-]+}.example.org`)"
entryPoints:
- web-secure
middlewares:
- csrf
service: django
tls:
certResolver: letsencrypt
domains:
- main: "*.example.org"
sans:
- "example.org"
certificatesResolvers:
letsencrypt:
acme:
email: "email@example.com"
storage: /etc/traefik/acme/acme.json
dnsChallenge:
provider: route53
delayBeforeCheck: 0
在 DNS 中,我有 example.org
和 *.example.org
的 A
记录。
是否可以同时获得适用于 www.*.example.org
和 *.example.org
的证书?
LetsEncrypt 不使用嵌套通配符。您可以获得 *.example.org
或 *.sub.example.org
的证书,但 *.example.org
在 *
.
.
此外,DNS 本身不支持嵌套或嵌入的通配符。
如果您为 www.*.example.com
创建一条记录,然后查询 www.foo.example.com
之类的内容,就可以看到这一点。您将收到 NXDOMAIN 响应。如果您查询 www.\*.example.com
(或将 FQDN 括在单引号中以避免 shell 扩展),那么您将获得您创建的 A 记录。当星号不在记录的开头时,星号将变为文字字符。
➤ host www.sub.productionwebsite.com 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:
Host www.sub.productionwebsite.com not found: 3(NXDOMAIN)
~
➤ host 'www.*.productionwebsite.com' 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:
www.*.productionwebsite.com has address 10.68.0.73