TLS-ALPN-01 Challenge (TLS-ALPN-01)
Definition
TLS-ALPN-01 is an ACME challenge where the server proves domain control on port 443 by presenting a special certificate for the acme-tls/1 protocol.
TLS-ALPN-01, defined in RFC 8737, validates domain control inside a TLS handshake. The CA connects to port 443 with SNI set to the domain and offers only the ALPN protocol acme-tls/1. The server must answer with a self-signed certificate for that domain containing a critical acmeIdentifier extension whose value is the SHA-256 digest of the key authorization. No HTTP request is made at all.
Why it matters
TLS-ALPN-01 suits software that terminates TLS itself and cannot or should not serve port 80, such as Caddy, Traefik and other reverse proxies. Because the challenge rides on a protocol name that browsers never request, it does not disturb normal traffic. It replaced the older TLS-SNI-01 method, which was withdrawn after it proved unsafe on shared hosting. Like HTTP-01, it cannot validate wildcard certificates.
Example
# acme.sh standalone ALPN mode (port 443 must be free during validation)
acme.sh --issue --alpn -d example.com
# See what a server returns when asked for the challenge protocol
openssl s_client -connect example.com:443 -servername example.com -alpn acme-tls/1 </dev/null
Common misconceptions
- It works through any CDN or load balancer. The device terminating TLS on port 443 must answer the challenge itself; a CDN in front usually cannot.
- Certbot supports it out of the box. Certbot's standard plugins use HTTP-01 and DNS-01; TLS-ALPN-01 is mainly found in clients such as Caddy, Traefik, lego and acme.sh.
- TLS-ALPN-01 is the same as TLS-SNI-01. TLS-SNI-01 was retired as insecure; TLS-ALPN-01 was designed to avoid its flaws.