Glossary

TLS-ALPN-01 Challenge (TLS-ALPN-01)

Last verified

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.

See also