I'm trying to understand why I'm getting rate limited by letsencrypt, when using a wildcard certificate and a few routers. I've replaced my real domain below.
My static configuration:
api:
dashboard: true
insecure: true
metrics:
prometheus:
entryPoint: https
manualRouting: true
log:
level: DEBUG
entryPoints:
http:
address: :80
http:
redirections:
entryPoint:
to: https
scheme: https
https:
address: ":443"
http:
tls:
certResolver: letsencrypt
options: intermediate
domains:
- main: "example.net"
sans:
- "*.example.net"
# luadns credentials supplied to traefik container as ENV variables
certificatesResolvers:
letsencryptStaging:
acme:
caServer: "https://acme-staging-v02.api.letsencrypt.org/directory"
email: oscar@example.net
storage: /etc/traefik/certs/acme-staging.json
dnsChallenge:
provider: luadns
delayBeforeCheck: 0
letsencrypt:
acme:
caServer: "https://acme-v02.api.letsencrypt.org/directory"
email: oscar@example.net
storage: /etc/traefik/certs/acme.json
dnsChallenge:
provider: luadns
delayBeforeCheck: 0
# Internal certificate authority
stepca:
acme:
caServer: "https://ca.home.arpa/acme/acme/directory"
email: oscar@example.net
storage: /etc/traefik/certs/acme-stepca.json
certificatesDuration: 24
tlsChallenge: {}
providers:
file:
directory: "/etc/traefik/config"
watch: true
providersThrottleDuration: 11
From my routers configuration:
# /etc/traefik/config/10-routers.yml
---
http:
routers:
examplenet:
rule: Host(`example.net`)
tls:
certResolver: letsencrypt
domains:
- main: "example.net"
sans: "*.example.net"
authelia:
rule: Host(`auth.example.net`)
service: authelia
entryPoints: https
middlewares:
- hstsHeader
- chainNoAuth
grafana:
rule: Host(`grafana.example.net`)
service: grafana
middlewares:
- hstsHeader
- chainNoAuth
# And then a few more routers defined just like above, copy & paste
# Then two routers using my internal zone and internal CA
dashboard:
rule: Host(`traefik.home.arpa`) && PathPrefix(`/dashboard`)
service: api@internal
middlewares:
- basicAuthDashboard
tls:
certresolver: stepca
metrics:
rule: Host(`traefik.home.arpa`) && PathPrefix(`/metrics`)
service: prometheus@internal
middlewares:
- prometheusScraperAllowedIPs
tls:
certresolver: stepca
In case it's relevant, here's my TLS configuration:
# /etc/traefik/config/40-tls.yml
---
tls:
options:
intermediate:
minVersion: VersionTLS12
cipherSuites:
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
Some sed/grep on traefik, this is from the legolog:
jul 28 07:55:37 atomic conmon[2545646]: time="2023-07-28T05:55:37Z" level=debug msg="legolog: [INFO] [traefik.home.arpa] acme: Trying renewal with -8 hours rema
ining"
jul 28 07:55:37 atomic conmon[2545646]: time="2023-07-28T05:55:37Z" level=debug msg="legolog: [INFO] [traefik.home.arpa] acme: Obtaining bundled SAN certificate"
jul 28 07:55:37 atomic conmon[2545646]: time="2023-07-28T05:55:37Z" level=debug msg="legolog: [INFO] [traefik.home.arpa] AuthURL: https://ca.home.arpa/acme/acme/authz/OyrEx4U8Jou7gariJJba21q687ctlhGA"
jul 28 07:55:37 atomic conmon[2545646]: time="2023-07-28T05:55:37Z" level=debug msg="legolog: [INFO] [traefik.home.arpa] acme: use tls-alpn-01 solver"
jul 28 07:55:37 atomic conmon[2545646]: time="2023-07-28T05:55:37Z" level=debug msg="legolog: [INFO] [traefik.home.arpa] acme: Trying to solve TLS-ALPN-01"
jul 28 07:55:37 atomic conmon[2545646]: time="2023-07-28T05:55:37Z" level=debug msg="legolog: [INFO] [traefik.home.arpa] The server validated our request"
jul 28 07:55:37 atomic conmon[2545646]: time="2023-07-28T05:55:37Z" level=debug msg="legolog: [INFO] [traefik.home.arpa] acme: Validations succeeded; requesting certificates"
jul 28 07:55:38 atomic conmon[2545646]: time="2023-07-28T05:55:38Z" level=debug msg="legolog: [INFO] [example.net, *.example.net] acme: Obtaining bundled SAN certificate"
jul 28 07:55:38 atomic conmon[2545646]: time="2023-07-28T05:55:38Z" level=debug msg="legolog: [INFO] [traefik.home.arpa] Server responded with a certificate."
jul 28 07:55:39 atomic conmon[2545646]: time="2023-07-28T05:55:39Z" level=debug msg="legolog: [INFO] [*.example.net] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/249671950336"
jul 28 07:55:39 atomic conmon[2545646]: time="2023-07-28T05:55:39Z" level=debug msg="legolog: [INFO] [example.net] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/249671950346"
jul 28 07:55:39 atomic conmon[2545646]: time="2023-07-28T05:55:39Z" level=debug msg="legolog: [INFO] [*.example.net] acme: use dns-01 solver"
jul 28 07:55:39 atomic conmon[2545646]: time="2023-07-28T05:55:39Z" level=debug msg="legolog: [INFO] [example.net] acme: Could not find solver for: tls-alpn-01"
jul 28 07:55:39 atomic conmon[2545646]: time="2023-07-28T05:55:39Z" level=debug msg="legolog: [INFO] [example.net] acme: Could not find solver for: http-01"
jul 28 07:55:39 atomic conmon[2545646]: time="2023-07-28T05:55:39Z" level=debug msg="legolog: [INFO] [example.net] acme: use dns-01 solver"
jul 28 07:55:39 atomic conmon[2545646]: time="2023-07-28T05:55:39Z" level=debug msg="legolog: [INFO] [*.example.net] acme: Preparing to solve DNS-01"
jul 28 07:55:40 atomic conmon[2545646]: time="2023-07-28T05:55:40Z" level=debug msg="legolog: [INFO] [example.net] acme: Preparing to solve DNS-01"
jul 28 07:55:40 atomic conmon[2545646]: time="2023-07-28T05:55:40Z" level=debug msg="legolog: [INFO] [*.example.net] acme: Trying to solve DNS-01"
jul 28 07:55:40 atomic conmon[2545646]: time="2023-07-28T05:55:40Z" level=debug msg="legolog: [INFO] [*.example.net] acme: Checking DNS record propagation using [172.19.19.5:53]"
jul 28 07:55:42 atomic conmon[2545646]: time="2023-07-28T05:55:42Z" level=debug msg="legolog: [INFO] Wait for propagation [timeout: 2m0s, interval: 2s]"
jul 28 07:55:44 atomic conmon[2545646]: time="2023-07-28T05:55:44Z" level=debug msg="legolog: [INFO] [*.example.net] The server validated our request"
jul 28 07:55:44 atomic conmon[2545646]: time="2023-07-28T05:55:44Z" level=debug msg="legolog: [INFO] [example.net] acme: Trying to solve DNS-01"
jul 28 07:55:44 atomic conmon[2545646]: time="2023-07-28T05:55:44Z" level=debug msg="legolog: [INFO] [example.net] acme: Checking DNS record propagation using [172.19.19.5:53]"
jul 28 07:55:46 atomic conmon[2545646]: time="2023-07-28T05:55:46Z" level=debug msg="legolog: [INFO] Wait for propagation [timeout: 2m0s, interval: 2s]"
jul 28 07:55:47 atomic conmon[2545646]: time="2023-07-28T05:55:47Z" level=debug msg="legolog: [INFO] [example.net] The server validated our request"
jul 28 07:55:47 atomic conmon[2545646]: time="2023-07-28T05:55:47Z" level=debug msg="legolog: [INFO] [*.example.net] acme: Cleaning DNS-01 challenge"
jul 28 07:55:48 atomic conmon[2545646]: time="2023-07-28T05:55:48Z" level=debug msg="legolog: [INFO] [example.net] acme: Cleaning DNS-01 challenge"
jul 28 07:55:48 atomic conmon[2545646]: time="2023-07-28T05:55:48Z" level=debug msg="legolog: [INFO] [example.net, *.example.net] acme: Validations succeeded; requesting certificates"
jul 28 07:55:52 atomic conmon[2545646]: time="2023-07-28T05:55:52Z" level=debug msg="legolog: [INFO] [example.net] Server responded with a certificate."
jul 28 08:01:59 atomic conmon[2567357]: time="2023-07-28T06:01:59Z" level=debug msg="legolog: [INFO] [example.net, *.example.net] acme: Obtaining bundled SAN certificate"
It looks fine to me? But acme.json doesn't contain any certificates! If I check acme-stepca.json
(for my internal CA) it contains certificates issued when starting traefik, ie, at the same time as the wildcard cert should have been issued.
# ls -lah certs/
total 43K
drwxr-xr-x 2 root root 5 jul 28 08:00 .
drwxr-xr-x 5 root root 7 jul 26 22:52 ..
-rw------- 1 root root 3,5K jul 28 08:01 acme.json
-rw------- 1 root root 16K jul 26 23:00 acme-staging.json
-rw------- 1 root root 11K jul 28 07:55 acme-stepca.json
Am I missing something obvious? What happened?