1. The problem I’m having:
I got an email from letsencrypt that my cert is expiring. And I was “what?”
Sure, the site is currently down - but caddy is available.
So I checked the cert:
curl -v https://paleocoran.de
* Host paleocoran.de:443 was resolved.
* IPv6: (none)
* IPv4: 188.34.187.82
* Trying 188.34.187.82:443...
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / x25519 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
* subject: CN=paleocoran.de
* start date: Dec 2 00:00:00 2024 GMT
* expire date: Mar 2 23:59:59 2025 GMT
* subjectAltName: host "paleocoran.de" matched cert's "paleocoran.de"
* issuer: C=AT; O=ZeroSSL; CN=ZeroSSL ECC Domain Secure Site CA
* SSL certificate verify ok.
* Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
* Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using ecdsa-with-SHA384
* Certificate level 2: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using ecdsa-with-SHA384
And there it says “ZeroSSL” not “Let’s Encrypt”.
Why? I might have upgraded caddy a while back - but other than that nothing has changed.
The other domains on the same caddy instances are still on “Let’s Encrypt”.
Any idea what is going on?
2. Error messages and/or full log output:
{"logger":"using provided configuration","config_file":"/etc/caddy/Caddyfile","config_adapter":"caddyfile"}
{"logger":"Caddyfile input is not formatted; run 'caddy fmt --overwrite' to fix inconsistencies","adapter":"caddyfile","file":"/etc/caddy/Caddyfile","line":2}
{"logger":"admin","msg":"admin endpoint started","address":":2019","enforce_origin":false,"origins":["//:2019"]}
{"logger":"admin","msg":"admin endpoint on open interface; host checking disabled","address":":2019"}
{"logger":"tls.cache.maintenance","msg":"started background certificate maintenance","cache":"0xc00043ec80"}
{"logger":"http.auto_https","msg":"server is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS","server_name":"srv0","https_port":443}
{"logger":"http.auto_https","msg":"enabling automatic HTTP->HTTPS redirects","server_name":"srv0"}
{"logger":"http","msg":"enabling HTTP/3 listener","addr":":443"}
{"logger":"http.log","msg":"server running","name":"srv0","protocols":["h1","h2","h3"]}
{"logger":"http.log","msg":"server running","name":"remaining_auto_https_redirects","protocols":["h1","h2","h3"]}
{"logger":"http","msg":"enabling automatic TLS certificate management","domains":["paleocoran.de","edit.corpuscoranicum.org","www.corpuscoranicum.org","corpuscoranicum.org"]}
{"logger":"tls","msg":"cleaning storage unit","storage":"FileStorage:/data/caddy"}
{"logger":"tls","msg":"finished cleaning storage units"}
{"logger":"autosaved config (load with --resume flag)","file":"/config/caddy/autosave.json"}
{"logger":"serving initial configuration"}
{"logger":"tls.cache.maintenance","msg":"advancing OCSP staple","identifiers":["paleocoran.de"],"from":1737618567,"to":1737920966}
{"logger":"tls.issuance.acme","msg":"looking up info for HTTP challenge","host":"paleocoran.de","remote_addr":"10.42.1.1:39239","user_agent":"Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)","error":"no information found to solve challenge for identifier: paleocoran.de"}
{"logger":"tls.issuance.zerossl","msg":"looking up info for HTTP challenge","host":"paleocoran.de","remote_addr":"10.42.1.1:39239","user_agent":"Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)","error":"no information found to solve challenge for identifier: paleocoran.de"}
{"logger":"tls.issuance.acme","msg":"looking up info for HTTP challenge","host":"paleocoran.de","remote_addr":"10.42.1.1:9526","user_agent":"Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)","error":"no information found to solve challenge for identifier: paleocoran.de"}
{"logger":"tls.issuance.zerossl","msg":"looking up info for HTTP challenge","host":"paleocoran.de","remote_addr":"10.42.1.1:9526","user_agent":"Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)","error":"no information found to solve challenge for identifier: paleocoran.de"}
{"logger":"tls","msg":"tls-alpn challenge","remote_addr":"10.42.1.1:37342","server_name":"paleocoran.de","error":"no information found to solve challenge for identifier: paleocoran.de"}
{"logger":"tls.issuance.acme","msg":"looking up info for HTTP challenge","host":"paleocoran.de","remote_addr":"10.42.1.1:2739","user_agent":"acme.zerossl.com/v2/DV90","error":"no information found to solve challenge for identifier: paleocoran.de"}
{"logger":"tls.issuance.zerossl","msg":"looking up info for HTTP challenge","host":"paleocoran.de","remote_addr":"10.42.1.1:2739","user_agent":"acme.zerossl.com/v2/DV90","error":"no information found to solve challenge for identifier: paleocoran.de"}
{"logger":"tls.issuance.acme","msg":"looking up info for HTTP challenge","host":"paleocoran.de","remote_addr":"10.42.1.1:1279","user_agent":"acme.zerossl.com/v2/DV90","error":"no information found to solve challenge for identifier: paleocoran.de"}
{"logger":"tls.issuance.zerossl","msg":"looking up info for HTTP challenge","host":"paleocoran.de","remote_addr":"10.42.1.1:1279","user_agent":"acme.zerossl.com/v2/DV90","error":"no information found to solve challenge for identifier: paleocoran.de"}
{"logger":"tls","msg":"storage cleaning happened too recently; skipping for now","storage":"FileStorage:/data/caddy","instance":"44a8fc3f-483b-4420-b0c2-d3d44fe7fe43","try_again":1737470935.6951663,"try_again_in":86399.999999343}
{"logger":"tls","msg":"finished cleaning storage units"}
{"logger":"tls.issuance.acme","msg":"looking up info for HTTP challenge","host":"paleocoran.de","remote_addr":"10.42.1.1:34519","user_agent":"Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)","error":"no information found to solve challenge for identifier: paleocoran.de"}
{"logger":"tls.issuance.zerossl","msg":"looking up info for HTTP challenge","host":"paleocoran.de","remote_addr":"10.42.1.1:34519","user_agent":"Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)","error":"no information found to solve challenge for identifier: paleocoran.de"}
{"logger":"tls.issuance.acme","msg":"looking up info for HTTP challenge","host":"paleocoran.de","remote_addr":"10.42.1.1:32795","user_agent":"Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)","error":"no information found to solve challenge for identifier: paleocoran.de"}
{"logger":"tls.issuance.zerossl","msg":"looking up info for HTTP challenge","host":"paleocoran.de","remote_addr":"10.42.1.1:32795","user_agent":"Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)","error":"no information found to solve challenge for identifier: paleocoran.de"}
{"logger":"tls","msg":"tls-alpn challenge","remote_addr":"10.42.1.1:1510","server_name":"paleocoran.de","error":"no information found to solve challenge for identifier: paleocoran.de"}
{"logger":"tls.issuance.acme","msg":"looking up info for HTTP challenge","host":"paleocoran.de","remote_addr":"10.42.1.1:26742","user_agent":"acme.zerossl.com/v2/DV90","error":"no information found to solve challenge for identifier: paleocoran.de"}
{"logger":"tls.issuance.zerossl","msg":"looking up info for HTTP challenge","host":"paleocoran.de","remote_addr":"10.42.1.1:26742","user_agent":"acme.zerossl.com/v2/DV90","error":"no information found to solve challenge for identifier: paleocoran.de"}
{"logger":"tls.issuance.acme","msg":"looking up info for HTTP challenge","host":"paleocoran.de","remote_addr":"10.42.1.1:45775","user_agent":"acme.zerossl.com/v2/DV90","error":"no information found to solve challenge for identifier: paleocoran.de"}
{"logger":"tls.issuance.zerossl","msg":"looking up info for HTTP challenge","host":"paleocoran.de","remote_addr":"10.42.1.1:45775","user_agent":"acme.zerossl.com/v2/DV90","error":"no information found to solve challenge for identifier: paleocoran.de"}
3. Caddy version:
image: caddy:2.7.6-alpine
4. How I installed and ran Caddy:
k3s, manifest below
a. System environment:
k3s on nixOS, x86
b. Command:
c. Service/unit/compose file:
containers:
- name: caddy
image: caddy:2.7.6-alpine
ports:
- name: http
containerPort: 80
- name: https
containerPort: 443
- name: admin
containerPort: 2019
volumeMounts:
- name: caddy-config
mountPath: /etc/caddy/Caddyfile
subPath: Caddyfile
- name: caddy-data
mountPath: /data
- name: cdn-storage
mountPath: /srv/volumes/cdn
d. My complete Caddy config:
{
email "tcurdt@redacted.org"
admin :2019
servers {
metrics
}
# debug
# acme_ca https://acme-staging-v02.api.letsencrypt.org/directory
}
www.redacted.org {
handle /.well-known/acme-challenge/* {
respond "{http.request.uri.path}" 200
}
handle {
redir https://redacted.org{uri} permanent
}
}
redacted.org {
header -server
@exists {
file /srv/volumes/cdn/maintenance
}
handle @exists {
respond "We will be back shortly" 503 {
close
}
}
handle_path /digitallibrary/servlet/* {
rewrite * /digilib{path}
reverse_proxy https://digilib.redacted.de:443 {
header_up Host {upstream_hostport}
}
}
# otherwise pass on to proxy
handle {
reverse_proxy http://cc.live-cc.svc.cluster.local:80
}
}
edit.redacted.org {
header -server
reverse_proxy http://cc-edit.live-cc.svc.cluster.local:80
}
paleocoran.de {
header -server
reverse_proxy http://pc.live-pc.svc.cluster.local:80
}