Wildcard and Namecheap Issues?

1. The problem I’m having:

Hello everyone. :slight_smile: I am trying to use Namecheap as my DNS Provider and have Caddy lease and renew certificates for my wildcard url. I get an error saying xyz is not a valid domain. I am not sure where to begin troubleshooting. I can confirm my namecheap DNS has a wildcard with the appropiate IP Address.

2. Error messages and/or full log output:

caddy  | {"level":"error","ts":1701060103.9745886,"logger":"tls.issuance.zerossl.acme_client","msg":"cleaning up solver","identifier":"*.example.com","challenge_type":"dns-01","error":"no memory of presenting a DNS record for \"_acme-challenge.example.com\" (usually OK if presenting also failed)"}
caddy  | {"level":"error","ts":1701060104.0441127,"logger":"tls.obtain","msg":"could not get certificate from issuer","identifier":"*.example.com","issuer":"acme-staging-v02.api.letsencrypt.org-directory","error":"[*.example.com] solving challenges: presenting for challenge: adding temporary record for zone \"xyz.\": domain: xyz is not a valid domain. Expected at least 1 TLD and 1 SLD (order=https://acme-staging-v02.api.letsencrypt.org/acme/order/126400904/12565262814) (ca=https://acme-staging-v02.api.letsencrypt.org/directory)"}
caddy  | {"level":"error","ts":1701060104.0441592,"logger":"tls.obtain","msg":"will retry","error":"[*.example.com] Obtain: [*.example.com] solving challenges: presenting for challenge: adding temporary record for zone \"xyz.\": domain: xyz is not a valid domain. Expected at least 1 TLD and 1 SLD (order=https://acme-staging-v02.api.letsencrypt.org/acme/order/126400904/12565262814) (ca=https://acme-staging-v02.api.letsencrypt.org/directory)","attempt":3,"retrying_in":120,"elapsed":182.406113883,"max_duration":2592000}
caddy  | {"level":"info","ts":1701060224.0448413,"logger":"tls.obtain","msg":"obtaining certificate","identifier":"*.example.com"}
caddy  | {"level":"info","ts":1701060224.25706,"logger":"tls.issuance.acme.acme_client","msg":"trying to solve challenge","identifier":"*.example.com","challenge_type":"dns-01","ca":"https://acme-staging-v02.api.letsencrypt.org/directory"}
caddy  | {"level":"error","ts":1701060224.3363547,"logger":"tls.issuance.acme.acme_client","msg":"cleaning up solver","identifier":"*.example.com","challenge_type":"dns-01","error":"no memory of presenting a DNS record for \"_acme-challenge.example.com\" (usually OK if presenting also failed)"}
caddy  | {"level":"error","ts":1701060224.405523,"logger":"tls.obtain","msg":"could not get certificate from issuer","identifier":"*.example.com","issuer":"acme-staging-v02.api.letsencrypt.org-directory","error":"[*.example.com] solving challenges: presenting for challenge: adding temporary record for zone \"xyz.\": domain: xyz is not a valid domain. Expected at least 1 TLD and 1 SLD (order=https://acme-staging-v02.api.letsencrypt.org/acme/order/126400904/12565306424) (ca=https://acme-staging-v02.api.letsencrypt.org/directory)"}
caddy  | {"level":"info","ts":1701060224.61004,"logger":"tls.issuance.zerossl.acme_client","msg":"trying to solve challenge","identifier":"*.example.com","challenge_type":"dns-01","ca":"https://acme-staging-v02.api.letsencrypt.org/directory"}
caddy  | {"level":"error","ts":1701060224.639476,"logger":"tls.issuance.zerossl.acme_client","msg":"cleaning up solver","identifier":"*.example.com","challenge_type":"dns-01","error":"no memory of presenting a DNS record for \"_acme-challenge.example.com\" (usually OK if presenting also failed)"}
caddy  | {"level":"error","ts":1701060224.7054188,"logger":"tls.obtain","msg":"could not get certificate from issuer","identifier":"*.example.com","issuer":"acme-staging-v02.api.letsencrypt.org-directory","error":"[*.example.com] solving challenges: presenting for challenge: adding temporary record for zone \"xyz.\": domain: xyz is not a valid domain. Expected at least 1 TLD and 1 SLD (order=https://acme-staging-v02.api.letsencrypt.org/acme/order/126400904/12565306614) (ca=https://acme-staging-v02.api.letsencrypt.org/directory)"}
caddy  | {"level":"error","ts":1701060224.7054589,"logger":"tls.obtain","msg":"will retry","error":"[*.example.com] Obtain: [*.example.com] solving challenges: presenting for challenge: adding temporary record for zone \"xyz.\": domain: xyz is not a valid domain. Expected at least 1 TLD and 1 SLD (order=https://acme-staging-v02.api.letsencrypt.org/acme/order/126400904/12565306614) (ca=https://acme-staging-v02.api.letsencrypt.org/directory)","attempt":4,"retrying_in":300,"elapsed":303.067413508,"max_duration":2592000}
^CGracefully stopping... (press Ctrl+C again to force)

3. Caddy version:

# caddy version
v2.7.5 h1:HoysvZkLcN2xJExEepaFHK92Qgs7xAiCFydN5x5Hs6Q=

4. How I installed and ran Caddy:

Built a caddy container using docker and docker compose.

Here is the Dockerfile:

FROM caddy:builder AS builder

RUN xcaddy build \
    --with github.com/caddy-dns/namecheap 

FROM caddy:latest

RUN apk add --no-cache bash
RUN apk add --no-cache vim

COPY --from=builder /usr/bin/caddy /usr/bin/caddy

c. Service/unit/compose file:

version: "3.7"

services:
  caddy:
    image: caddy:latest
    container_name: caddy
    restart: unless-stopped
    build:
      context: ./build
      dockerfile: dockerfile
    cap_add:
      - NET_ADMIN
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - $PWD/Caddyfile:/etc/caddy/Caddyfile 
      - $PWD/site:/srv
      - $PWD/data:/data
      - $PWD/config:/config
  
  portainer:
    image: portainer/portainer-ce:alpine
    container_name: portainer
    command: -H unix:///var/run/docker.sock
    ports:
      - "9000:9000"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "portainer_data:/data"
    restart: always

volumes:
  portainer_data:

d. My complete Caddy config:

{
	acme_ca https://acme-staging-v02.api.letsencrypt.org/directory
}

(tls_config) {
	tls {
		dns namecheap {
			api_key {env.NAMECHEAP_API_KEY}
			user {env.NAMECHEAP_API_USER}
		}
	}
}

*.4tress.xyz {
	import tls_config
	header Access-Control-Allow-Origin "*"
	header Access-Control-Allow-Methods "POST, GET, OPTIONS"

	@books host books.4tress.xyz
	handle @books {
		reverse_proxy 192.168.50.77:8083
	}
	@docker host docker.4tress.xyz
	handle @docker {
		reverse_proxy 192.168.50.77:9000
	}
	@home host home.4tress.xyz
	handle @home {
		reverse_proxy 192.168.50.77:3015
	}
	@sync host syncthing.4tress.xyz
	handle @sync {
		reverse_proxy 192.168.50.77:8084
	}
}

I see that this is the same issue as this user was having:

I think there’s probably a bug with the libdns/namecheap plugin.

The error is coming from here:

Please open an issue on GitHub to get help with this.

I went ahead and made an issue here. I will keep this thread updated when there is progress. Thank you!

I see to be getting a similar response about my domain from Google Cloud DNS and ROUTE 53. I am using the staging server as per my caddy config - am I still rate limited?

caddy  | {"level":"info","ts":1701182952.121528,"logger":"tls.issuance.acme","msg":"waiting on internal rate limiter","identifiers":["*.4tress.xyz"],"ca":"https://acme-staging-v02.api.letsencrypt.org/directory","account":""}
caddy  | {"level":"info","ts":1701182952.1226685,"logger":"tls.issuance.acme","msg":"done waiting on internal rate limiter","identifiers":["*.4tress.xyz"],"ca":"https://acme-staging-v02.api.letsencrypt.org/directory","account":""}
caddy  | {"level":"info","ts":1701182952.6054409,"logger":"tls.issuance.acme.acme_client","msg":"trying to solve challenge","identifier":"*.4tress.xyz","challenge_type":"dns-01","ca":"https://acme-staging-v02.api.letsencrypt.org/directory"}
caddy  | {"level":"error","ts":1701182953.0826576,"logger":"tls.issuance.acme.acme_client","msg":"cleaning up solver","identifier":"*.4tress.xyz","challenge_type":"dns-01","error":"no memory of presenting a DNS record for \"_acme-challenge.4tress.xyz\" (usually OK if presenting also failed)"}
caddy  | {"level":"error","ts":1701182953.1508667,"logger":"tls.obtain","msg":"could not get certificate from issuer","identifier":"*.4tress.xyz","issuer":"acme-staging-v02.api.letsencrypt.org-directory","error":"[*.4tress.xyz] solving challenges: presenting for challenge: adding temporary record for zone \"xyz.\": HostedZoneNotFound: No zones found for the domain xyz. (order=https://acme-staging-v02.api.letsencrypt.org/acme/order/126400904/12601994404) (ca=https://acme-staging-v02.api.letsencrypt.org/directory)"}
caddy  | {"level":"info","ts":1701182953.1513336,"logger":"tls.issuance.zerossl","msg":"waiting on internal rate limiter","identifiers":["*.4tress.xyz"],"ca":"https://acme-staging-v02.api.letsencrypt.org/directory","account":""}
caddy  | {"level":"info","ts":1701182953.151364,"logger":"tls.issuance.zerossl","msg":"done waiting on internal rate limiter","identifiers":["*.4tress.xyz"],"ca":"https://acme-staging-v02.api.letsencrypt.org/directory","account":""}
caddy  | {"level":"info","ts":1701182953.4686947,"logger":"tls.issuance.zerossl.acme_client","msg":"trying to solve challenge","identifier":"*.4tress.xyz","challenge_type":"dns-01","ca":"https://acme-staging-v02.api.letsencrypt.org/directory"}
caddy  | {"level":"error","ts":1701182953.8321927,"logger":"tls.issuance.zerossl.acme_client","msg":"cleaning up solver","identifier":"*.4tress.xyz","challenge_type":"dns-01","error":"no memory of presenting a DNS record for \"_acme-challenge.4tress.xyz\" (usually OK if presenting also failed)"}
caddy  | {"level":"error","ts":1701182953.8971004,"logger":"tls.obtain","msg":"could not get certificate from issuer","identifier":"*.4tress.xyz","issuer":"acme-staging-v02.api.letsencrypt.org-directory","error":"[*.4tress.xyz] solving challenges: presenting for challenge: adding temporary record for zone \"xyz.\": HostedZoneNotFound: No zones found for the domain xyz. (order=https://acme-staging-v02.api.letsencrypt.org/acme/order/126400904/12601994714) (ca=https://acme-staging-v02.api.letsencrypt.org/directory)"}
caddy  | {"level":"error","ts":1701182953.897135,"logger":"tls.obtain","msg":"will retry","error":"[*.4tress.xyz] Obtain: [*.4tress.xyz] solving challenges: presenting for challenge: adding temporary record for zone \"xyz.\": HostedZoneNotFound: No zones found for the domain xyz. (order=https://acme-staging-v02.api.letsencrypt.org/acme/order/126400904/12601994714) (ca=https://acme-staging-v02.api.letsencrypt.org/directory)","attempt":1,"retrying_in":60,"elapsed":1.777748503,"max_duration":2592000}

That error is coming from here:

I have to conclude there’s something weird about your domain that’s causing this.

I’m not sure why the zone is xyz., it should be 4tress.xyz. I think. :thinking:

I noticed the same thing! I am so lost right now. Everything was working fine in my testing, I’m not sure what I changed to break things so suddenly, and I don’t know how my domain is the issue. I can only hope the issue on GitHub updates, but the fact that it reoccurs across different DNS plugins doesn’t reassure me.

When I tried my domain without a wildcard and without any DNS plugins, I got this:

caddy  | {"level":"error","ts":1701221723.7379491,"logger":"tls.obtain","msg":"will retry","error":"[4tress.xyz] Obtain: [4tress.xyz] solving challenge: 4tress.xyz: [4tress.xyz] authorization failed: HTTP 400 urn:ietf:params:acme:error:tls - 68.13.176.197: remote error: tls: no application protocol (ca=https://acme-staging-v02.api.letsencrypt.org/directory)","attempt":1,"retrying_in":60,"elapsed":2.847745805,"max_duration":2592000}

Is the zone missing a SOA record? Or an NS record?

Sorry for being dense, but can you elaborate?

Does the domain name have proper DNS records? Specifically NS / SOA record types?

Yes, I went ahead and checked it again. NS and SOA in particular is correct.
For clarity: I am currently using Google Cloud as my DNS provider since namecheap wasn’t giving me results.

{"level":"error","ts":1701492886.637473,"logger":"tls.issuance.acme.acme_client","msg":"cleaning up solver","identifier":"*.4tress.xyz","challenge_type":"dns-01","error":"no memory of presenting a DNS record for \"_acme-challenge.4tress.xyz\" (usually OK if presenting also failed)"}
{"level":"error","ts":1701492886.7012322,"logger":"tls.obtain","msg":"could not get certificate from issuer","identifier":"*.4tress.xyz","issuer":"acme-staging-v02.api.letsencrypt.org-directory","error":"[*.4tress.xyz] solving challenges: presenting for challenge: adding temporary record for zone \"xyz.\": unable to find Google managaged zone for domain xyz. (order=https://acme-staging-v02.api.letsencrypt.org/acme/order/127499404/12687875944) (ca=https://acme-staging-v02.api.letsencrypt.org/directory)"}
{"level":"info","ts":1701492886.902997,"logger":"tls.issuance.zerossl.acme_client","msg":"trying to solve challenge","identifier":"*.4tress.xyz","challenge_type":"dns-01","ca":"https://acme-staging-v02.api.letsencrypt.org/directory"}
{"level":"error","ts":1701492886.9030626,"logger":"tls.issuance.zerossl.acme_client","msg":"cleaning up solver","identifier":"*.4tress.xyz","challenge_type":"dns-01","error":"no memory of presenting a DNS record for \"_acme-challenge.4tress.xyz\" (usually OK if presenting also failed)"}
{"level":"error","ts":1701492886.9718497,"logger":"tls.obtain","msg":"could not get certificate from issuer","identifier":"*.4tress.xyz","issuer":"acme-staging-v02.api.letsencrypt.org-directory","error":"[*.4tress.xyz] solving challenges: presenting for challenge: adding temporary record for zone \"xyz.\": unable to find Google managaged zone for domain xyz. (order=https://acme-staging-v02.api.letsencrypt.org/acme/order/127499404/12687876034) (ca=https://acme-staging-v02.api.letsencrypt.org/directory)"}
{"level":"error","ts":1701492886.97218,"logger":"tls.obtain","msg":"will retry","error":"[*.4tress.xyz] Obtain: [*.4tress.xyz] solving challenges: presenting for challenge: adding temporary record for zone \"xyz.\": unable to find Google managaged zone for domain xyz. (order=https://acme-staging-v02.api.letsencrypt.org/acme/order/127499404/12687876034) (ca=https://acme-staging-v02.api.letsencrypt.org/directory)","attempt":2,"retrying_in":120,"elapsed":61.960046321,"max_duration":2592000}

Hmm, that leads me to believe something strange about the Google Cloud environment. Does it have split DNS or something?

It has “zones” so it could, yes, but I only have one at the moment. The same issue is occurring so I don’t think rate limiting is a problem anymore. I seem to run into an issue regardless of what DNS plugin I am using. I have no problems using DNS plugins in other tools, such as NGINX Proxy Manager, or certbot. Truly don’t know the issue.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.