# What Is TLS-ALPN-01 Challenge (TLS-ALPN-01)?

> 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.

Source: https://ssl.sh/glossary/tls-alpn-01/
Last updated: 2026-11-10

TLS-ALPN-01, defined in [RFC 8737](https://www.rfc-editor.org/rfc/rfc8737), validates domain control inside a TLS handshake. The CA connects to port 443 with SNI set to the domain and offers only the [ALPN](https://ssl.sh/glossary/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](https://ssl.sh/glossary/reverse-proxy/). 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](https://ssl.sh/glossary/http-01/), it cannot validate wildcard certificates.

## Example
```bash
# 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.

## Related terms

- [ACME](https://ssl.sh/zh/glossary/acme/): ACME 是 IETF 标准协议（RFC 8555），让软件自动向 CA 证明域名控制权，并自动申请、续期和吊销证书。
- [ALPN](https://ssl.sh/zh/glossary/alpn/): ALPN 是一个 TLS 扩展，让客户端和服务器在握手过程中直接商定上层协议，例如 h2 或 http/1.1，不需要额外往返。
- [HTTP-01](https://ssl.sh/zh/glossary/http-01/): HTTP-01 是一种 ACME 验证方式，客户端通过 80 端口以普通 HTTP 提供 CA 指定的令牌内容来证明域名控制权。
- [DNS-01](https://ssl.sh/zh/glossary/dns-01/): DNS-01 是一种 ACME 验证方式，客户端在 _acme-challenge 子域名下发布由 CA 质询计算出的 TXT 记录来证明域名控制权。
- [TLS 握手](https://ssl.sh/zh/glossary/tls-handshake/): TLS 握手是 TLS 连接开始时的一组消息交换，客户端与服务器在其中协商协议版本和密码套件、验证服务器身份并派生会话密钥。
- [DCV](https://ssl.sh/zh/glossary/dcv/): DCV 即域名控制权验证，是 CA 在签发证书前确认申请者确实控制证书中每一个域名的检查。
- [反向代理](https://ssl.sh/zh/glossary/reverse-proxy/): 反向代理是代表后端服务器接收客户端连接、再把请求转发给后端的服务器，通常同时承担 TLS 终止。
