Skip to content

Commit 8680e5e

Browse files
authored
Document TLS-ALPN-01 challenge requirements for reverse proxy (#656)
1 parent 31a1eb5 commit 8680e5e

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

src/pages/manage/reverse-proxy/index.mdx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,18 @@ The proxy supports two modes for TLS certificate management:
140140

141141
When a certificate is successfully issued, the proxy notifies the management server and the service status changes to `active`.
142142

143+
#### TLS-ALPN-01 requirements
144+
145+
The default ACME challenge type (`tls-alpn-01`) validates domain ownership by responding on port 443 with a special TLS certificate containing the `acme-tls/1` ALPN protocol. For this challenge to succeed, the following conditions must be met:
146+
147+
- **Port 443 must be publicly reachable** - Let's Encrypt connects to your server on port 443 to perform the challenge. If port 443 is blocked by a firewall or not forwarded correctly, certificate issuance will fail.
148+
- **No geo-blocking** - Let's Encrypt validates from multiple global locations simultaneously. If your firewall or CDN blocks requests from non-local IP ranges, some or all validation attempts will fail and the certificate will not be issued.
149+
- **ALPN protocol support** - If there is an additional proxy or load balancer in front of the NetBird proxy, it must support passing through the `acme-tls/1` ALPN protocol. Traefik and Caddy handle this natively through TLS passthrough. Nginx, Apache, and some CDN providers (such as Cloudflare) may strip or fail to negotiate the `acme-tls/1` protocol, causing the challenge to fail.
150+
151+
<Note>
152+
If any of these requirements cannot be met in your environment, switch to the `http-01` challenge type by setting `NB_PROXY_ACME_CHALLENGE_TYPE=http-01`. The HTTP-01 challenge validates over port 80 using a plain HTTP request and does not depend on ALPN protocol support. However, it requires port 80 to be accessible from the internet.
153+
</Note>
154+
143155
**Static certificate mode** - Provide your own certificate and key files. This is useful for wildcard certificates or certificates from a corporate CA. Configure with:
144156

145157
| Environment variable | Description |

src/pages/selfhosted/migration/enable-reverse-proxy.mdx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,10 @@ If your self-hosted deployment currently uses Nginx, Caddy, or another reverse p
422422
2. Ensure the wildcard DNS record resolves correctly: `dig myapp.proxy.example.com`
423423
3. Check proxy logs for ACME errors: `docker compose logs proxy | grep -i acme`
424424
4. If using `http-01` challenge type, ensure port 80 is also accessible
425+
5. Ensure no geo-blocking is active on your firewall or CDN - Let's Encrypt validates from multiple global locations simultaneously, and blocking non-local IPs will cause validation to fail
426+
6. If you have an additional proxy or load balancer in front of Traefik, verify it supports the `acme-tls/1` ALPN protocol required by the `tls-alpn-01` challenge. Some providers (such as Cloudflare) may not pass through this protocol. If this is an issue, switch to `NB_PROXY_ACME_CHALLENGE_TYPE=http-01`
427+
428+
For a full explanation of TLS-ALPN-01 requirements, see [TLS-ALPN-01 requirements](/manage/reverse-proxy#tls-alpn-01-requirements).
425429

426430
### TLS passthrough not working
427431

0 commit comments

Comments
 (0)