1. The problem I’m having:
I’m trying to get https for my local services. Trying with Uptime Kuma first.
I’m using Caddy for local SSL only. No outside access. No port forwarding.
I’m using the Cloudflare DNS Plugin to achieve this.
The problem is that pretty much 99% of the time, I can’t access it with https because the browser shows this error: ERR_SSL_PROTOCOL_ERROR
The weird part is that it always work from my phone but ONLY when I use the DuckDuckGo Browser. If I use Chrome, Brave or Firefox on my phone, I get the same error. Only DuckDuckGo works. I noticed there’s a different output on the logs when I visit from DuckDuckGo Browser. I thought it was my computer, so I tried from a Windows Sandbox but still get the same issue.
But wait, there’s more.
I used the exact same Dockerfile, compose.yml, .env and Caddyfile at a different location. Everything works fine. What could be causing this?
Here’s the curl -v output
curl -v https://www.homelab2025.com
* Trying 10.0.0.123:443...
* Connected to www.homelab2025.com (10.0.0.123) port 443 (#0)
* ALPN: offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: /etc/ssl/certs
* 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_CHACHA20_POLY1305_SHA256
* ALPN: server accepted h2
* Server certificate:
* subject: CN=*.homelab2025.com
* start date: May 21 23:45:08 2025 GMT
* expire date: Aug 19 23:45:07 2025 GMT
* subjectAltName: host "www.homelab2025.com" matched cert's "*.homelab2025.com"
* issuer: C=US; O=Let's Encrypt; CN=E6
* SSL certificate verify ok.
* using HTTP/2
* h2h3 [:method: GET]
* h2h3 [:path: /]
* h2h3 [:scheme: https]
* h2h3 [:authority: www.homelab2025.com]
* h2h3 [user-agent: curl/7.88.1]
* h2h3 [accept: */*]
* Using Stream ID: 1 (easy handle 0x56365ee757a0)
> GET / HTTP/2
> Host: www.homelab2025.com
> user-agent: curl/7.88.1
> accept: */*
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
< HTTP/2 302
< alt-svc: h3=":443"; ma=2592000
< content-type: text/plain; charset=utf-8
< date: Thu, 22 May 2025 01:37:24 GMT
< location: /status/service
< vary: Accept
< via: 1.1 Caddy
< x-frame-options: SAMEORIGIN
< content-length: 37
<
* Connection #0 to host www.homelab2025.com left intact
Found. Redirecting to /status/service
2. Error messages and/or full log output:
caddy | {"level":"debug","ts":1747876793.2589161,"logger":"events","msg":"event","name":"tls_get_certificate","id":"6fd45a62-638f-4c95-bb7f-0419d6f1ab95","origin":"tls","data":{"client_hello":{"CipherSuites":[4865,4866,4867,49195,49199,49196,49200,52393,52392,49171,49172,156,157,47,53],"ServerName":"cloudflare-ech.com","SupportedCurves":[29,23,24],"SupportedPoints":"AA==","SignatureSchemes":[1027,2052,1025,1283,2053,1281,2054,1537],"SupportedProtos":["h2","http/1.1"],"SupportedVersions":[772,771],"RemoteAddr":{"IP":"10.0.0.10","Port":63917,"Zone":""},"LocalAddr":{"IP":"172.18.0.2","Port":443,"Zone":""}}}}
caddy | {"level":"debug","ts":1747876793.259084,"logger":"tls.handshake","msg":"no matching certificates and no custom selection logic","identifier":"cloudflare-ech.com"}
caddy | {"level":"debug","ts":1747876793.2590897,"logger":"tls.handshake","msg":"no matching certificates and no custom selection logic","identifier":"*.com"}
caddy | {"level":"debug","ts":1747876793.2590928,"logger":"tls.handshake","msg":"no matching certificates and no custom selection logic","identifier":"*.*"}
caddy | {"level":"debug","ts":1747876793.2591012,"logger":"tls.handshake","msg":"no certificate matching TLS ClientHello","remote_ip":"10.0.0.10","remote_port":"63917","server_name":"cloudflare-ech.com","remote":"10.0.0.10:63917","identifier":"cloudflare-ech.com","cipher_suites":[4865,4866,4867,49195,49199,49196,49200,52393,52392,49171,49172,156,157,47,53],"cert_cache_fill":0.0001,"load_or_obtain_if_necessary":true,"on_demand":false}
caddy | {"level":"debug","ts":1747876793.259182,"logger":"http.stdlib","msg":"http: TLS handshake error from 10.0.0.10:63917: no certificate available for 'cloudflare-ech.com'"}
caddy | {"level":"debug","ts":1747876793.2609184,"logger":"events","msg":"event","name":"tls_get_certificate","id":"5c8b604c-2f64-4813-aa24-937c3bdfd978","origin":"tls","data":{"client_hello":{"CipherSuites":[4865,4866,4867,49195,49199,49196,49200,52393,52392,49171,49172,156,157,47,53],"ServerName":"cloudflare-ech.com","SupportedCurves":[29,23,24],"SupportedPoints":"AA==","SignatureSchemes":[1027,2052,1025,1283,2053,1281,2054,1537],"SupportedProtos":["h2","http/1.1"],"SupportedVersions":[772,771],"RemoteAddr":{"IP":"10.0.0.10","Port":63918,"Zone":""},"LocalAddr":{"IP":"172.18.0.2","Port":443,"Zone":""}}}}
caddy | {"level":"debug","ts":1747876793.260967,"logger":"tls.handshake","msg":"no matching certificates and no custom selection logic","identifier":"cloudflare-ech.com"}
caddy | {"level":"debug","ts":1747876793.260988,"logger":"tls.handshake","msg":"no matching certificates and no custom selection logic","identifier":"*.com"}
caddy | {"level":"debug","ts":1747876793.2609916,"logger":"tls.handshake","msg":"no matching certificates and no custom selection logic","identifier":"*.*"}
caddy | {"level":"debug","ts":1747876793.2609982,"logger":"tls.handshake","msg":"no certificate matching TLS ClientHello","remote_ip":"10.0.0.10","remote_port":"63918","server_name":"cloudflare-ech.com","remote":"10.0.0.10:63918","identifier":"cloudflare-ech.com","cipher_suites":[4865,4866,4867,49195,49199,49196,49200,52393,52392,49171,49172,156,157,47,53],"cert_cache_fill":0.0001,"load_or_obtain_if_necessary":true,"on_demand":false}
caddy | {"level":"debug","ts":1747876793.261033,"logger":"http.stdlib","msg":"http: TLS handshake error from 10.0.0.10:63918: no certificate available for 'cloudflare-ech.com'"}
#It works when I visit the website from DuckDuckGo Browser on Android. Check the difference after this.
caddy | {"level":"debug","ts":1747876799.5392537,"logger":"events","msg":"event","name":"tls_get_certificate","id":"47eebda1-3af8-449c-9450-5df3d4f40fb6","origin":"tls","data":{"client_hello":{"CipherSuites":[19018,4865,4866,4867,49195,49199,49196,49200,52393,52392,49171,49172,156,157,47,53],"ServerName":"www.homelab2025.com","SupportedCurves":[64250,4588,29,23,24],"SupportedPoints":"AA==","SignatureSchemes":[1027,2052,1025,1283,2053,1281,2054,1537],"SupportedProtos":["h2","http/1.1"],"SupportedVersions":[56026,772,771],"RemoteAddr":{"IP":"10.0.0.60","Port":45254,"Zone":""},"LocalAddr":{"IP":"172.18.0.2","Port":443,"Zone":""}}}}
caddy | {"level":"debug","ts":1747876799.5392992,"logger":"tls.handshake","msg":"choosing certificate","identifier":"www.homelab2025.com","num_choices":1}
caddy | {"level":"debug","ts":1747876799.5393062,"logger":"tls.handshake","msg":"default certificate selection results","identifier":"www.homelab2025.com","subjects":["www.homelab2025.com"],"managed":true,"issuer_key":"acme-v02.api.letsencrypt.org-directory","hash":"f0a91dc4bce08c8d090fc4deac2ee5f431196e7712afc437ad6b2e1e034e15d3"}
caddy | {"level":"debug","ts":1747876799.5393128,"logger":"tls.handshake","msg":"matched certificate in cache","remote_ip":"10.0.0.60","remote_port":"45254","subjects":["www.homelab2025.com"],"managed":true,"expiration":1755649266,"hash":"f0a91dc4bce08c8d090fc4deac2ee5f431196e7712afc437ad6b2e1e034e15d3"}
caddy | {"level":"debug","ts":1747876799.5812647,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.0.123:3001","total_upstreams":1}
caddy | {"level":"debug","ts":1747876799.5878925,"logger":"http.handlers.reverse_proxy","msg":"upstream roundtrip","upstream":"10.0.0.123:3001","duration":0.006561258,"request":{"remote_ip":"10.0.0.60","remote_port":"45254","client_ip":"10.0.0.60","proto":"HTTP/2.0","method":"GET","host":"www.homelab2025.com","uri":"/","headers":{"Sec-Gpc":["1"],"Sec-Fetch-Mode":["navigate"],"Sec-Ch-Ua":["\"Chromium\";v=\"136\", \"DuckDuckGo\";v=\"136\", \"Not.A/Brand\";v=\"99\""],"Sec-Ch-Ua-Platform":["\"Android\""],"X-Forwarded-Host":["www.homelab2025.com"],"Via":["2.0 Caddy"],"Sec-Fetch-User":["?1"],"X-Requested-With":["com.duckduckgo.mobile.android"],"Priority":["u=0, i"],"Upgrade-Insecure-Requests":["1"],"Accept-Encoding":["gzip, deflate, br, zstd"],"Accept-Language":["en-US,en;q=0.9"],"Sec-Ch-Ua-Mobile":["?1"],"Accept":["text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"],"User-Agent":["Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Mobile Safari/537.36"],"X-Forwarded-Proto":["https"],"Sec-Fetch-Site":["none"],"Sec-Fetch-Dest":["document"],"X-Forwarded-For":["10.0.0.60"]},"tls":{"resumed":false,"version":772,"cipher_suite":4867,"proto":"h2","server_name":"www.homelab2025.com"}},"headers":{"Vary":["Accept"],"Content-Type":["text/html; charset=utf-8"],"Content-Length":["44"],"Date":["Thu, 22 May 2025 01:19:59 GMT"],"Connection":["keep-alive"],"Keep-Alive":["timeout=5"],"X-Frame-Options":["SAMEORIGIN"],"Location":["/status/service"]},"status":302}
caddy | {"level":"debug","ts":1747876799.6432235,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.0.123:3001","total_upstreams":1}
caddy | {"level":"debug","ts":1747876799.6449149,"logger":"http.handlers.reverse_proxy","msg":"upstream roundtrip","upstream":"10.0.0.123:3001","duration":0.001629564,"request":{"remote_ip":"10.0.0.60","remote_port":"45254","client_ip":"10.0.0.60","proto":"HTTP/2.0","method":"GET","host":"www.homelab2025.com","uri":"/status/service","headers":{"Sec-Ch-Ua-Platform":["\"Android\""],"X-Forwarded-Proto":["https"],"Sec-Ch-Ua":["\"Chromium\";v=\"136\", \"DuckDuckGo\";v=\"136\", \"Not.A/Brand\";v=\"99\""],"Sec-Fetch-Site":["none"],"Sec-Fetch-User":["?1"],"Accept-Language":["en-US,en;q=0.9"],"Priority":["u=0, i"],"Sec-Fetch-Mode":["navigate"],"Accept":["text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"],"Sec-Ch-Ua-Mobile":["?1"],"X-Requested-With":["com.duckduckgo.mobile.android"],"X-Forwarded-For":["10.0.0.60"],"X-Forwarded-Host":["www.homelab2025.com"],"Via":["2.0 Caddy"],"User-Agent":["Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Mobile Safari/537.36"],"Sec-Fetch-Dest":["document"],"Upgrade-Insecure-Requests":["1"],"Sec-Gpc":["1"],"Accept-Encoding":["gzip, deflate, br, zstd"]},"tls":{"resumed":false,"version":772,"cipher_suite":4867,"proto":"h2","server_name":"www.homelab2025.com"}},"headers":{"Date":["Thu, 22 May 2025 01:19:59 GMT"],"Connection":["keep-alive"],"Keep-Alive":["timeout=5"],"X-Frame-Options":["SAMEORIGIN"],"Content-Type":["text/html; charset=utf-8"],"Content-Length":["3532"],"Etag":["W/\"dcc-dtutMLt7hO3XVkgTaU35mFugAhs\""]},"status":200}
caddy | {"level":"debug","ts":1747876799.7369206,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.0.123:3001","total_upstreams":1}
caddy | {"level":"debug","ts":1747876799.7376168,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.0.123:3001","total_upstreams":1}
caddy | {"level":"debug","ts":1747876799.742394,"logger":"http.handlers.reverse_proxy","msg":"upstream roundtrip","upstream":"10.0.0.123:3001","duration":0.005367916,"request":{"remote_ip":"10.0.0.60","remote_port":"45254","client_ip":"10.0.0.60","proto":"HTTP/2.0","method":"GET","host":"www.homelab2025.com","uri":"/assets/index-bOVKKa1O.css","headers":{"Sec-Fetch-Dest":["style"],"Accept-Language":["en-US,en;q=0.9"],"Origin":["https://www.homelab2025.com"],"User-Agent":["Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Mobile Safari/537.36"],"X-Requested-With":["com.duckduckgo.mobile.android"],"Sec-Ch-Ua":["\"Chromium\";v=\"136\", \"DuckDuckGo\";v=\"136\", \"Not.A/Brand\";v=\"99\""],"X-Forwarded-For":["10.0.0.60"],"Via":["2.0 Caddy"],"Sec-Fetch-Site":["same-origin"],"Accept-Encoding":["gzip, deflate, br, zstd"],"Sec-Ch-Ua-Platform":["\"Android\""],"Sec-Fetch-Mode":["cors"],"X-Forwarded-Host":["www.homelab2025.com"],"Sec-Ch-Ua-Mobile":["?1"],"Accept":["text/css,*/*;q=0.1"],"Referer":["https://www.homelab2025.com/status/service"],"Priority":["u=0"],"X-Forwarded-Proto":["https"]},"tls":{"resumed":false,"version":772,"cipher_suite":4867,"proto":"h2","server_name":"www.homelab2025.com"}},"headers":{"Vary":["Accept-Encoding"],"Accept-Ranges":["bytes"],"Etag":["W/\"afc3-193e2ecf7a8\""],"Connection":["keep-alive"],"Keep-Alive":["timeout=5"],"X-Frame-Options":["SAMEORIGIN"],"Content-Encoding":["gzip"],"Content-Type":["text/css; charset=UTF-8"],"Cache-Control":["public, max-age=0"],"Last-Modified":["Fri, 20 Dec 2024 07:16:41 GMT"],"Content-Length":["44995"],"Date":["Thu, 22 May 2025 01:19:59 GMT"]},"status":200}
caddy | {"level":"debug","ts":1747876799.74436,"logger":"http.handlers.reverse_proxy","msg":"upstream roundtrip","upstream":"10.0.0.123:3001","duration":0.006616487,"request":{"remote_ip":"10.0.0.60","remote_port":"45254","client_ip":"10.0.0.60","proto":"HTTP/2.0","method":"GET","host":"www.homelab2025.com","uri":"/assets/index-B_z9mVlf.js","headers":{"Sec-Fetch-Site":["same-origin"],"Origin":["https://www.homelab2025.com"],"X-Requested-With":["com.duckduckgo.mobile.android"],"Priority":["u=1"],"Via":["2.0 Caddy"],"Accept":["*/*"],"Accept-Language":["en-US,en;q=0.9"],"Sec-Ch-Ua-Platform":["\"Android\""],"X-Forwarded-For":["10.0.0.60"],"Sec-Fetch-Mode":["cors"],"Sec-Fetch-Dest":["script"],"User-Agent":["Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Mobile Safari/537.36"],"X-Forwarded-Host":["www.homelab2025.com"],"Sec-Ch-Ua":["\"Chromium\";v=\"136\", \"DuckDuckGo\";v=\"136\", \"Not.A/Brand\";v=\"99\""],"Sec-Ch-Ua-Mobile":["?1"],"Referer":["https://www.homelab2025.com/status/service"],"Accept-Encoding":["gzip, deflate, br, zstd"],"X-Forwarded-Proto":["https"]},"tls":{"resumed":false,"version":772,"cipher_suite":4867,"proto":"h2","server_name":"www.homelab2025.com"}},"headers":{"Content-Type":["application/javascript; charset=UTF-8"],"Accept-Ranges":["bytes"],"Cache-Control":["public, max-age=0"],"Last-Modified":["Fri, 20 Dec 2024 07:16:41 GMT"],"Content-Length":["489902"],"Connection":["keep-alive"],"Vary":["Accept-Encoding"],"Content-Encoding":["gzip"],"Etag":["W/\"779ae-193e2ecf7a8\""],"Date":["Thu, 22 May 2025 01:19:59 GMT"],"Keep-Alive":["timeout=5"],"X-Frame-Options":["SAMEORIGIN"]},"status":200}
caddy | {"level":"debug","ts":1747876799.9775877,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.0.123:3001","total_upstreams":1}
caddy | {"level":"debug","ts":1747876799.9775877,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.0.123:3001","total_upstreams":1}
caddy | {"level":"debug","ts":1747876799.981267,"logger":"http.handlers.reverse_proxy","msg":"upstream roundtrip","upstream":"10.0.0.123:3001","duration":0.003599161,"request":{"remote_ip":"10.0.0.60","remote_port":"45254","client_ip":"10.0.0.60","proto":"HTTP/2.0","method":"GET","host":"www.homelab2025.com","uri":"/icon.svg","headers":{"User-Agent":["Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Mobile Safari/537.36"],"Referer":["https://www.homelab2025.com/status/service"],"Accept-Language":["en-US,en;q=0.9"],"Priority":["i"],"Origin":["https://www.homelab2025.com"],"Sec-Ch-Ua-Platform":["\"Android\""],"X-Forwarded-For":["10.0.0.60"],"Sec-Ch-Ua-Mobile":["?1"],"X-Requested-With":["com.duckduckgo.mobile.android"],"Sec-Fetch-Site":["same-origin"],"Sec-Fetch-Dest":["image"],"Accept-Encoding":["gzip, deflate, br, zstd"],"X-Forwarded-Proto":["https"],"X-Forwarded-Host":["www.homelab2025.com"],"Via":["2.0 Caddy"],"Sec-Fetch-Mode":["cors"],"Sec-Ch-Ua":["\"Chromium\";v=\"136\", \"DuckDuckGo\";v=\"136\", \"Not.A/Brand\";v=\"99\""],"Accept":["image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8"]},"tls":{"resumed":false,"version":772,"cipher_suite":4867,"proto":"h2","server_name":"www.homelab2025.com"}},"headers":{"Last-Modified":["Fri, 20 Dec 2024 07:16:41 GMT"],"Content-Length":["617"],"Keep-Alive":["timeout=5"],"Content-Encoding":["gzip"],"Content-Type":["image/svg+xml"],"Accept-Ranges":["bytes"],"Etag":["W/\"269-193e2ecf7a8\""],"Date":["Thu, 22 May 2025 01:19:59 GMT"],"Connection":["keep-alive"],"X-Frame-Options":["SAMEORIGIN"],"Vary":["Accept-Encoding"],"Cache-Control":["public, max-age=0"]},"status":200}
caddy | {"level":"debug","ts":1747876800.0208743,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.0.123:3001","total_upstreams":1}
caddy | {"level":"debug","ts":1747876800.0232003,"logger":"http.handlers.reverse_proxy","msg":"upstream roundtrip","upstream":"10.0.0.123:3001","duration":0.002235749,"request":{"remote_ip":"10.0.0.60","remote_port":"45254","client_ip":"10.0.0.60","proto":"HTTP/2.0","method":"GET","host":"www.homelab2025.com","uri":"/icon.svg","headers":{"X-Forwarded-For":["10.0.0.60"],"User-Agent":["Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Mobile Safari/537.36"],"X-Requested-With":["com.duckduckgo.mobile.android"],"Accept-Language":["en-US,en;q=0.9"],"X-Forwarded-Host":["www.homelab2025.com"],"Via":["2.0 Caddy"],"If-None-Match":["W/\"269-193e2ecf7a8\""],"Priority":["i"],"If-Modified-Since":["Fri, 20 Dec 2024 07:16:41 GMT"],"X-Forwarded-Proto":["https"],"Accept":["image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8"],"Referer":["https://www.homelab2025.com/status/service"],"Sec-Fetch-Mode":["no-cors"],"Sec-Ch-Ua-Platform":["\"Android\""],"Sec-Ch-Ua":["\"Chromium\";v=\"136\", \"DuckDuckGo\";v=\"136\", \"Not.A/Brand\";v=\"99\""],"Sec-Fetch-Site":["same-origin"],"Sec-Fetch-Dest":["image"],"Accept-Encoding":["gzip, deflate, br, zstd"],"Sec-Ch-Ua-Mobile":["?1"]},"tls":{"resumed":false,"version":772,"cipher_suite":4867,"proto":"h2","server_name":"www.homelab2025.com"}},"headers":{"X-Frame-Options":["SAMEORIGIN"],"Last-Modified":["Fri, 20 Dec 2024 07:16:41 GMT"],"Etag":["W/\"269-193e2ecf7a8\""],"Date":["Thu, 22 May 2025 01:20:00 GMT"],"Vary":["Accept-Encoding"],"Accept-Ranges":["bytes"],"Cache-Control":["public, max-age=0"],"Connection":["keep-alive"],"Keep-Alive":["timeout=5"]},"status":304}
caddy | {"level":"debug","ts":1747876800.0455482,"logger":"http.handlers.reverse_proxy","msg":"upstream roundtrip","upstream":"10.0.0.123:3001","duration":0.067773526,"request":{"remote_ip":"10.0.0.60","remote_port":"45254","client_ip":"10.0.0.60","proto":"HTTP/2.0","method":"GET","host":"www.homelab2025.com","uri":"/api/status-page/heartbeat/service","headers":{"X-Requested-With":["com.duckduckgo.mobile.android"],"Accept-Encoding":["gzip, deflate, br, zstd"],"Priority":["u=1, i"],"X-Forwarded-For":["10.0.0.60"],"Via":["2.0 Caddy"],"Sec-Ch-Ua-Platform":["\"Android\""],"Accept":["application/json, text/plain, */*"],"Sec-Fetch-Site":["same-origin"],"Sec-Fetch-Dest":["empty"],"X-Forwarded-Proto":["https"],"X-Forwarded-Host":["www.homelab2025.com"],"Sec-Ch-Ua-Mobile":["?1"],"Sec-Ch-Ua":["\"Chromium\";v=\"136\", \"DuckDuckGo\";v=\"136\", \"Not.A/Brand\";v=\"99\""],"Accept-Language":["en-US,en;q=0.9"],"User-Agent":["Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Mobile Safari/537.36"],"Sec-Fetch-Mode":["cors"],"Referer":["https://www.homelab2025.com/status/service"]},"tls":{"resumed":false,"version":772,"cipher_suite":4867,"proto":"h2","server_name":"www.homelab2025.com"}},"headers":{"Connection":["keep-alive"],"Keep-Alive":["timeout=5"],"X-Frame-Options":["SAMEORIGIN"],"Cache-Control":["no-cache"],"Content-Type":["application/json; charset=utf-8"],"Content-Length":["36091"],"Etag":["W/\"8cfb-8MkkhVDfYDGhuQPcHiLTRCcasJw\""],"Date":["Thu, 22 May 2025 01:20:00 GMT"]},"status":200}
caddy | {"level":"debug","ts":1747876800.2155852,"logger":"events","msg":"event","name":"tls_get_certificate","id":"c51d50e4-d280-42d9-aeed-eb1a9d6dadf2","origin":"tls","data":{"client_hello":{"CipherSuites":[4865,4866,4867,49195,49196,52393,49199,49200,52392,49171,49172,156,157,47,53],"ServerName":"homelab2025.com","SupportedCurves":[29,23,24],"SupportedPoints":"AA==","SignatureSchemes":[1027,2052,1025,1283,2053,1281,2054,1537,513],"SupportedProtos":["h2","http/1.1"],"SupportedVersions":[772,771],"RemoteAddr":{"IP":"10.0.0.60","Port":45262,"Zone":""},"LocalAddr":{"IP":"172.18.0.2","Port":443,"Zone":""}}}}
caddy | {"level":"debug","ts":1747876800.2156265,"logger":"tls.handshake","msg":"no matching certificates and no custom selection logic","identifier":"homelab2025.com"}
caddy | {"level":"debug","ts":1747876800.2156327,"logger":"tls.handshake","msg":"no matching certificates and no custom selection logic","identifier":"*.org"}
caddy | {"level":"debug","ts":1747876800.2156358,"logger":"tls.handshake","msg":"no matching certificates and no custom selection logic","identifier":"*.*"}
caddy | {"level":"debug","ts":1747876800.2156441,"logger":"tls.handshake","msg":"no certificate matching TLS ClientHello","remote_ip":"10.0.0.60","remote_port":"45262","server_name":"homelab2025.com","remote":"10.0.0.60:45262","identifier":"homelab2025.com","cipher_suites":[4865,4866,4867,49195,49196,52393,49199,49200,52392,49171,49172,156,157,47,53],"cert_cache_fill":0.0001,"load_or_obtain_if_necessary":true,"on_demand":false}
caddy | {"level":"debug","ts":1747876800.2157462,"logger":"http.stdlib","msg":"http: TLS handshake error from 10.0.0.60:45262: no certificate available for 'homelab2025.com'"}
caddy | {"level":"debug","ts":1747876800.2466135,"logger":"events","msg":"event","name":"tls_get_certificate","id":"ee3cfd5d-8704-4c9d-b0c3-95679c10c393","origin":"tls","data":{"client_hello":{"CipherSuites":[4865,4866,4867,49195,49196,52393,49199,49200,52392,49171,49172,156,157,47,53],"ServerName":"homelab2025.com","SupportedCurves":[29,23,24],"SupportedPoints":"AA==","SignatureSchemes":[1027,2052,1025,1283,2053,1281,2054,1537,513],"SupportedProtos":["h2","http/1.1"],"SupportedVersions":[772,771],"RemoteAddr":{"IP":"10.0.0.60","Port":45276,"Zone":""},"LocalAddr":{"IP":"172.18.0.2","Port":443,"Zone":""}}}}
caddy | {"level":"debug","ts":1747876800.2466571,"logger":"tls.handshake","msg":"no matching certificates and no custom selection logic","identifier":"homelab2025.com"}
caddy | {"level":"debug","ts":1747876800.2466629,"logger":"tls.handshake","msg":"no matching certificates and no custom selection logic","identifier":"*.org"}
caddy | {"level":"debug","ts":1747876800.2466662,"logger":"tls.handshake","msg":"no matching certificates and no custom selection logic","identifier":"*.*"}
caddy | {"level":"debug","ts":1747876800.246674,"logger":"tls.handshake","msg":"no certificate matching TLS ClientHello","remote_ip":"10.0.0.60","remote_port":"45276","server_name":"homelab2025.com","remote":"10.0.0.60:45276","identifier":"homelab2025.com","cipher_suites":[4865,4866,4867,49195,49196,52393,49199,49200,52392,49171,49172,156,157,47,53],"cert_cache_fill":0.0001,"load_or_obtain_if_necessary":true,"on_demand":false}
caddy | {"level":"debug","ts":1747876800.2467585,"logger":"http.stdlib","msg":"http: TLS handshake error from 10.0.0.60:45276: no certificate available for 'homelab2025.com'"}
3. Caddy version:
v2.10.0
4. How I installed and ran Caddy:
I used the xcaddy builder and Docker Compose.
Here’s my Dockerfile:
FROM caddy:builder AS builder
RUN xcaddy build \
--with github.com/caddy-dns/cloudflare
FROM caddy:latest
COPY --from=builder /usr/bin/caddy /usr/bin/caddy
a. System environment:
Debian 12.11 - x64
Docker 28.1.1
b. Command:
docker compose up -d
c. Service/unit/compose file:
services:
caddy:
build:
context: .
dockerfile: Dockerfile
container_name: caddy
restart: unless-stopped
env_file:
- .env
environment:
- TZ=America/New_York
- CLOUDFLARE_API_TOKEN=${CF_API_TOKEN}
ports:
- 80:80
- 443:443
volumes:
- ./caddy-config:/config
- ./caddy-data:/data
- ./Caddyfile:/etc/caddy/Caddyfile
volumes:
caddy-data:
caddy-config:
d. My complete Caddy config:
{
debug
}
# The Caddyfile is an easy way to configure your Caddy web server.
#
# Unless the file starts with a global options block, the first
# uncommented line is always the address of your site.
#
# To use your own domain name (with automatic HTTPS), first make
# sure your domain's A/AAAA DNS records are properly pointed to
# this machine's public IP, then replace ":80" below with your
# domain name.
:80 {
# Set this path to your site's directory.
root * /usr/share/caddy
# Enable the static file server.
file_server
# Another common task is to set up a reverse proxy:
# reverse_proxy localhost:8080
# Or serve a PHP site through php-fpm:
# php_fastcgi localhost:9000
}
# Refer to the Caddy docs for more information:
# https://caddyserver.com/docs/caddyfile
# ==========================================================================
www.homelab2025.com {
tls {
dns cloudflare {env.CF_API_TOKEN}
}
reverse_proxy http://10.0.0.123:3001
}
# ==========================================================================
homelab2025.com {
tls {
dns cloudflare {env.CF_API_TOKEN}
}
reverse_proxy http://10.0.0.123:3001
}
# ==========================================================================