Caddy - could not get certificate from issuer (Windows)

1. The problem I’m having:

I followed this tutorial - https://www.youtube.com/watch?v=AEyhpuWeiTk&t=685s trying to setup a reverse proxy for Jellyfin using Caddy and DuckDNS. I installed both, but when I ran the command “./Caddy run --config Caddyfile” in PowerShell I got multiple errors like “could not get certificate from issuer” followed by “likely a Firewall issue”. I made the rules on both my router and my firewall. Portchecker says both HTTP and HTTPS ports are closed. If it’s relevant, I was using Tailscale for Jellyfin up until this point and I’m still using it until I get it to work, I don’t want to set it up again. I’m also connected through ethernet

2. Error messages and/or full log output:

PS C:\Users\vinnt\downloads\Caddy> ./caddy run --config Caddyfile
2026/07/05 17:43:51.024 INFO    maxprocs: Leaving GOMAXPROCS=2: CPU quota undefined
2026/07/05 17:43:51.024 INFO    GOMEMLIMIT is updated   {"GOMEMLIMIT": 9604233216, "previous": 9223372036854775807}
2026/07/05 17:43:51.024 INFO    using config from file  {"file": "Caddyfile"}
2026/07/05 17:43:51.024 INFO    adapted config to JSON  {"adapter": "caddyfile"}
2026/07/05 17:43:51.024 WARN    Caddyfile input is not formatted; run 'caddy fmt --overwrite' to fix inconsistencies   {"adapter": "caddyfile", "file": "Caddyfile", "line": 2}
2026/07/05 17:43:51.091 INFO    admin   admin endpoint started  {"address": "localhost:2019", "enforce_origin": false, "origins": ["//localhost:2019", "//[::1]:2019", "//127.0.0.1:2019"]}
2026/07/05 17:43:51.096 INFO    http.auto_https 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}
2026/07/05 17:43:51.104 INFO    http.auto_https enabling automatic HTTP->HTTPS redirects        {"server_name": "srv0"}
2026/07/05 17:43:51.109 INFO    http    enabling HTTP/3 listener        {"addr": ":443"}
2026/07/05 17:43:51.111 INFO    http.log        server running  {"name": "srv0", "protocols": ["h1", "h2", "h3"]}
2026/07/05 17:43:51.114 WARN    http    HTTP/2 skipped because it requires TLS  {"network": "tcp", "addr": ":80"}
2026/07/05 17:43:51.124 WARN    http    HTTP/3 skipped because it requires TLS  {"network": "tcp", "addr": ":80"}
2026/07/05 17:43:51.126 INFO    http.log        server running  {"name": "remaining_auto_https_redirects", "protocols": ["h1", "h2", "h3"]}
2026/07/05 17:43:51.127 INFO    http    enabling automatic TLS certificate management   {"domains": ["cdxxplus.duckdns.org"]}
2026/07/05 17:43:51.128 INFO    autosaved config (load with --resume flag)      {"file": "C:\\Users\\vinnt\\AppData\\Roaming\\Caddy\\autosave.json"}
2026/07/05 17:43:51.140 INFO    serving initial configuration
2026/07/05 17:43:51.104 INFO    tls.cache.maintenance   started background certificate maintenance      {"cache": "0x153a8ec88500"}
2026/07/05 17:43:51.160 INFO    tls.obtain      acquiring lock  {"identifier": "cdxxplus.duckdns.org"}
2026/07/05 17:43:51.162 INFO    tls     storage cleaning happened too recently; skipping for now        {"storage": "FileStorage:C:\\Users\\vinnt\\AppData\\Roaming\\Caddy", "instance": "62fc2d99-ae54-440f-9ee7-75d7f08d0dcc", "try_again": "2026/07/06 17:43:51.162", "try_again_in": 86400}
2026/07/05 17:43:51.193 INFO    tls     finished cleaning storage units
2026/07/05 17:43:51.197 INFO    tls.obtain      lock acquired   {"identifier": "cdxxplus.duckdns.org"}
2026/07/05 17:43:51.215 INFO    tls.obtain      obtaining certificate   {"identifier": "cdxxplus.duckdns.org"}
2026/07/05 17:43:51.239 INFO    http    waiting on internal rate limiter        {"identifiers": ["cdxxplus.duckdns.org"], "ca": "https://acme-v02.api.letsencrypt.org/directory", "account": ""}
2026/07/05 17:43:51.244 INFO    http    done waiting on internal rate limiter   {"identifiers": ["cdxxplus.duckdns.org"], "ca": "https://acme-v02.api.letsencrypt.org/directory", "account": ""}
2026/07/05 17:43:51.246 INFO    http    using ACME account      {"account_id": "https://acme-v02.api.letsencrypt.org/acme/acct/3505115696", "account_contact": []}
2026/07/05 17:43:52.448 INFO    http.acme_client        trying to solve challenge       {"identifier": "cdxxplus.duckdns.org", "challenge_type": "http-01", "ca": "https://acme-v02.api.letsencrypt.org/directory"}
2026/07/05 17:44:03.013 ERROR   http.acme_client        challenge failed        {"identifier": "cdxxplus.duckdns.org", "challenge_type": "http-01", "problem": {"type": "urn:ietf:params:acme:error:connection", "title": "", "detail": "78.80.80.226: Fetching http://cdxxplus.duckdns.org/.well-known/acme-challenge/QM8HKoN_kqyVUyE4ZDyQvpYsA27z94-JA9dyTpGuppw: Timeout during connect (likely firewall problem)", "instance": "", "subproblems": null}}
2026/07/05 17:44:03.028 ERROR   http.acme_client        validating authorization        {"identifier": "cdxxplus.duckdns.org", "problem": {"type": "urn:ietf:params:acme:error:connection", "title": "", "detail": "78.80.80.226: Fetching http://cdxxplus.duckdns.org/.well-known/acme-challenge/QM8HKoN_kqyVUyE4ZDyQvpYsA27z94-JA9dyTpGuppw: Timeout during connect (likely firewall problem)", "instance": "", "subproblems": null}, "order": "https://acme-v02.api.letsencrypt.org/acme/order/3505115696/528944032846", "attempt": 1, "max_attempts": 3}
2026/07/05 17:44:04.382 INFO    http.acme_client        trying to solve challenge       {"identifier": "cdxxplus.duckdns.org", "challenge_type": "tls-alpn-01", "ca": "https://acme-v02.api.letsencrypt.org/directory"}
2026/07/05 17:44:14.655 ERROR   http.acme_client        challenge failed        {"identifier": "cdxxplus.duckdns.org", "challenge_type": "tls-alpn-01", "problem": {"type": "urn:ietf:params:acme:error:connection", "title": "", "detail": "78.80.80.226: Timeout during connect (likely firewall problem)", "instance": "", "subproblems": null}}
2026/07/05 17:44:14.661 ERROR   http.acme_client        validating authorization        {"identifier": "cdxxplus.duckdns.org", "problem": {"type": "urn:ietf:params:acme:error:connection", "title": "", "detail": "78.80.80.226: Timeout during connect (likely firewall problem)", "instance": "", "subproblems": null}, "order": "https://acme-v02.api.letsencrypt.org/acme/order/3505115696/528944082206", "attempt": 2, "max_attempts": 3}
2026/07/05 17:44:14.662 ERROR   tls.obtain      could not get certificate from issuer   {"identifier": "cdxxplus.duckdns.org", "issuer": "acme-v02.api.letsencrypt.org-directory", "error": "HTTP 400 urn:ietf:params:acme:error:connection - 78.80.80.226: Timeout during connect (likely firewall problem)"}
2026/07/05 17:44:14.666 ERROR   tls.obtain      will retry      {"error": "[cdxxplus.duckdns.org] Obtain: [cdxxplus.duckdns.org] solving challenge: cdxxplus.duckdns.org: [cdxxplus.duckdns.org] authorization failed: HTTP 400 urn:ietf:params:acme:error:connection - 78.80.80.226: Timeout during connect (likely firewall problem) (ca=https://acme-v02.api.letsencrypt.org/directory)", "attempt": 1, "retrying_in": 60, "elapsed": 23.4504684, "max_duration": 2592000}
2026/07/05 17:45:14.673 INFO    tls.obtain      obtaining certificate   {"identifier": "cdxxplus.duckdns.org"}
2026/07/05 17:45:14.697 INFO    http    using ACME account      {"account_id": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/309706974", "account_contact": []}
2026/07/05 17:45:16.462 INFO    http.acme_client        trying to solve challenge       {"identifier": "cdxxplus.duckdns.org", "challenge_type": "tls-alpn-01", "ca": "https://acme-staging-v02.api.letsencrypt.org/directory"}
2026/07/05 17:45:23.646 ERROR   http.acme_client        challenge failed        {"identifier": "cdxxplus.duckdns.org", "challenge_type": "tls-alpn-01", "problem": {"type": "urn:ietf:params:acme:error:connection", "title": "", "detail": "78.80.80.226: Connection refused", "instance": "", "subproblems": null}}
2026/07/05 17:45:23.648 ERROR   http.acme_client        validating authorization        {"identifier": "cdxxplus.duckdns.org", "problem": {"type": "urn:ietf:params:acme:error:connection", "title": "", "detail": "78.80.80.226: Connection refused", "instance": "", "subproblems": null}, "order": "https://acme-staging-v02.api.letsencrypt.org/acme/order/309706974/43298198364", "attempt": 1, "max_attempts": 3}
2026/07/05 17:45:24.973 INFO    http.acme_client        trying to solve challenge       {"identifier": "cdxxplus.duckdns.org", "challenge_type": "http-01", "ca": "https://acme-staging-v02.api.letsencrypt.org/directory"}
2026/07/05 17:45:31.737 ERROR   http.acme_client        challenge failed        {"identifier": "cdxxplus.duckdns.org", "challenge_type": "http-01", "problem": {"type": "urn:ietf:params:acme:error:connection", "title": "", "detail": "78.80.80.226: Fetching http://cdxxplus.duckdns.org/.well-known/acme-challenge/50QTzREk1K0CdOR3h5NoYhyMMhv93Rs7uX1Fi9jQQS8: Connection refused", "instance": "", "subproblems": null}}
2026/07/05 17:45:31.742 ERROR   http.acme_client        validating authorization        {"identifier": "cdxxplus.duckdns.org", "problem": {"type": "urn:ietf:params:acme:error:connection", "title": "", "detail": "78.80.80.226: Fetching http://cdxxplus.duckdns.org/.well-known/acme-challenge/50QTzREk1K0CdOR3h5NoYhyMMhv93Rs7uX1Fi9jQQS8: Connection refused", "instance": "", "subproblems": null}, "order": "https://acme-staging-v02.api.letsencrypt.org/acme/order/309706974/43298207304", "attempt": 2, "max_attempts": 3}
2026/07/05 17:45:31.743 ERROR   tls.obtain      could not get certificate from issuer   {"identifier": "cdxxplus.duckdns.org", "issuer": "acme-v02.api.letsencrypt.org-directory", "error": "HTTP 400 urn:ietf:params:acme:error:connection - 78.80.80.226: Fetching http://cdxxplus.duckdns.org/.well-known/acme-challenge/50QTzREk1K0CdOR3h5NoYhyMMhv93Rs7uX1Fi9jQQS8: Connection refused"}
2026/07/05 17:45:31.743 ERROR   tls.obtain      will retry      {"error": "[cdxxplus.duckdns.org] Obtain: [cdxxplus.duckdns.org] solving challenge: cdxxplus.duckdns.org: [cdxxplus.duckdns.org] authorization failed: HTTP 400 urn:ietf:params:acme:error:connection - 78.80.80.226: Fetching http://cdxxplus.duckdns.org/.well-known/acme-challenge/50QTzREk1K0CdOR3h5NoYhyMMhv93Rs7uX1Fi9jQQS8: Connection refused (ca=https://acme-staging-v02.api.letsencrypt.org/directory)", "attempt": 2, "retrying_in": 120, "elapsed": 100.5273086, "max_duration": 2592000}
2026/07/05 17:47:31.744 INFO    tls.obtain      obtaining certificate   {"identifier": "cdxxplus.duckdns.org"}
2026/07/05 17:47:31.757 INFO    http    using ACME account      {"account_id": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/309706974", "account_contact": []}
2026/07/05 17:47:32.356 INFO    http.acme_client        trying to solve challenge       {"identifier": "cdxxplus.duckdns.org", "challenge_type": "tls-alpn-01", "ca": "https://acme-staging-v02.api.letsencrypt.org/directory"}
2026/07/05 17:47:39.375 ERROR   http.acme_client        challenge failed        {"identifier": "cdxxplus.duckdns.org", "challenge_type": "tls-alpn-01", "problem": {"type": "urn:ietf:params:acme:error:connection", "title": "", "detail": "78.80.80.226: Connection refused", "instance": "", "subproblems": null}}
2026/07/05 17:47:39.509 ERROR   http.acme_client        validating authorization        {"identifier": "cdxxplus.duckdns.org", "problem": {"type": "urn:ietf:params:acme:error:connection", "title": "", "detail": "78.80.80.226: Connection refused", "instance": "", "subproblems": null}, "order": "https://acme-staging-v02.api.letsencrypt.org/acme/order/309706974/43298348694", "attempt": 1, "max_attempts": 3}
2026/07/05 17:47:41.039 INFO    http.acme_client        trying to solve challenge       {"identifier": "cdxxplus.duckdns.org", "challenge_type": "http-01", "ca": "https://acme-staging-v02.api.letsencrypt.org/directory"}
2026/07/05 17:47:50.986 ERROR   http.acme_client        challenge failed        {"identifier": "cdxxplus.duckdns.org", "challenge_type": "http-01", "problem": {"type": "urn:ietf:params:acme:error:connection", "title": "", "detail": "78.80.80.226: Fetching http://cdxxplus.duckdns.org/.well-known/acme-challenge/rDyH5sOEzju7qjO9RXX0XEKHGm-KZ12YU4OO8HcCxXM: Connection refused", "instance": "", "subproblems": null}}
2026/07/05 17:47:50.986 ERROR   http.acme_client        validating authorization        {"identifier": "cdxxplus.duckdns.org", "problem": {"type": "urn:ietf:params:acme:error:connection", "title": "", "detail": "78.80.80.226: Fetching http://cdxxplus.duckdns.org/.well-known/acme-challenge/rDyH5sOEzju7qjO9RXX0XEKHGm-KZ12YU4OO8HcCxXM: Connection refused", "instance": "", "subproblems": null}, "order": "https://acme-staging-v02.api.letsencrypt.org/acme/order/309706974/43298357564", "attempt": 2, "max_attempts": 3}
2026/07/05 17:47:50.986 ERROR   tls.obtain      could not get certificate from issuer   {"identifier": "cdxxplus.duckdns.org", "issuer": "acme-v02.api.letsencrypt.org-directory", "error": "HTTP 400 urn:ietf:params:acme:error:connection - 78.80.80.226: Fetching http://cdxxplus.duckdns.org/.well-known/acme-challenge/rDyH5sOEzju7qjO9RXX0XEKHGm-KZ12YU4OO8HcCxXM: Connection refused"}
2026/07/05 17:47:50.986 ERROR   tls.obtain      will retry      {"error": "[cdxxplus.duckdns.org] Obtain: [cdxxplus.duckdns.org] solving challenge: cdxxplus.duckdns.org: [cdxxplus.duckdns.org] authorization failed: HTTP 400 urn:ietf:params:acme:error:connection - 78.80.80.226: Fetching http://cdxxplus.duckdns.org/.well-known/acme-challenge/rDyH5sOEzju7qjO9RXX0XEKHGm-KZ12YU4OO8HcCxXM: Connection refused (ca=https://acme-staging-v02.api.letsencrypt.org/directory)", "attempt": 3, "retrying_in": 120, "elapsed": 239.7702251, "max_duration": 2592000}
2026/07/05 17:49:50.989 INFO    tls.obtain      obtaining certificate   {"identifier": "cdxxplus.duckdns.org"}
2026/07/05 17:49:50.993 INFO    http    using ACME account      {"account_id": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/309706974", "account_contact": []}
2026/07/05 17:49:52.154 INFO    http.acme_client        trying to solve challenge       {"identifier": "cdxxplus.duckdns.org", "challenge_type": "tls-alpn-01", "ca": "https://acme-staging-v02.api.letsencrypt.org/directory"}
2026/07/05 17:50:02.011 ERROR   http.acme_client        challenge failed        {"identifier": "cdxxplus.duckdns.org", "challenge_type": "tls-alpn-01", "problem": {"type": "urn:ietf:params:acme:error:connection", "title": "", "detail": "78.80.80.226: Connection refused", "instance": "", "subproblems": null}}
2026/07/05 17:50:02.012 ERROR   http.acme_client        validating authorization        {"identifier": "cdxxplus.duckdns.org", "problem": {"type": "urn:ietf:params:acme:error:connection", "title": "", "detail": "78.80.80.226: Connection refused", "instance": "", "subproblems": null}, "order": "https://acme-staging-v02.api.letsencrypt.org/acme/order/309706974/43298492214", "attempt": 1, "max_attempts": 3}
2026/07/05 17:50:03.335 INFO    http.acme_client        trying to solve challenge       {"identifier": "cdxxplus.duckdns.org", "challenge_type": "http-01", "ca": "https://acme-staging-v02.api.letsencrypt.org/directory"}
2026/07/05 17:50:14.179 ERROR   http.acme_client        challenge failed        {"identifier": "cdxxplus.duckdns.org", "challenge_type": "http-01", "problem": {"type": "urn:ietf:params:acme:error:connection", "title": "", "detail": "78.80.80.226: Fetching http://cdxxplus.duckdns.org/.well-known/acme-challenge/OhVvOod628XlOVW0yT9K6M1FpyfgMcejGZ7Feo-Nbi4: Timeout during connect (likely firewall problem)", "instance": "", "subproblems": null}}
2026/07/05 17:50:14.180 ERROR   http.acme_client        validating authorization        {"identifier": "cdxxplus.duckdns.org", "problem": {"type": "urn:ietf:params:acme:error:connection", "title": "", "detail": "78.80.80.226: Fetching http://cdxxplus.duckdns.org/.well-known/acme-challenge/OhVvOod628XlOVW0yT9K6M1FpyfgMcejGZ7Feo-Nbi4: Timeout during connect (likely firewall problem)", "instance": "", "subproblems": null}, "order": "https://acme-staging-v02.api.letsencrypt.org/acme/order/309706974/43298505334", "attempt": 2, "max_attempts": 3}
2026/07/05 17:50:14.180 ERROR   tls.obtain      could not get certificate from issuer   {"identifier": "cdxxplus.duckdns.org", "issuer": "acme-v02.api.letsencrypt.org-directory", "error": "HTTP 400 urn:ietf:params:acme:error:connection - 78.80.80.226: Fetching http://cdxxplus.duckdns.org/.well-known/acme-challenge/OhVvOod628XlOVW0yT9K6M1FpyfgMcejGZ7Feo-Nbi4: Timeout during connect (likely firewall problem)"}
2026/07/05 17:50:14.180 ERROR   tls.obtain      will retry      {"error": "[cdxxplus.duckdns.org] Obtain: [cdxxplus.duckdns.org] solving challenge: cdxxplus.duckdns.org: [cdxxplus.duckdns.org] authorization failed: HTTP 400 urn:ietf:params:acme:error:connection - 78.80.80.226: Fetching http://cdxxplus.duckdns.org/.well-known/acme-challenge/OhVvOod628XlOVW0yT9K6M1FpyfgMcejGZ7Feo-Nbi4: Timeout during connect (likely firewall problem) (ca=https://acme-staging-v02.api.letsencrypt.org/directory)", "attempt": 4, "retrying_in": 300, "elapsed": 382.9651372, "max_duration": 2592000}

3. Caddy version:

v2.11.4

4. How I installed and ran Caddy:

I downloaded from Download Caddy for WindowsAMD64 along with caddy-dns/cloudflare and caddy-dns/duckdns

a. System environment:

Windows 11 25H2, OS build 26200.8655, not using Docker for Caddy

b. Command:

PS C:\Users\vinnt\downloads\Caddy> ./caddy run --config Caddyfile

c. Service/unit/compose file:

d. My complete Caddy config:

cdxxplus.duckdns.org {
    reverse_proxy 127.0.0.1:8096
}

5. Links to relevant resources:

The tutorial: https://www.youtube.com/watch?v=AEyhpuWeiTk&t=685s

Are you sure that you set up port forwarding correctly? Are you sure your ISP isn’t blocking access to ports 80 and 443? Are you sure your IP address is correct? Are you sure your ISP doesn’t use CG-NAT (which means the IP address doesn’t belong to only you – many ISPs do this when they don’t own enough IPs for all their customers)?

Yup, apparently T-Mobile uses CG NAT. That sucks. I guess I can’t do anything about it, can I?

Thanks for the help