如何测试LettuceEncrypt示例应用?附域名验证失败报错
解决LettuceEncrypt + ngrok验证失败的问题
问题原因
你遇到的remote error: tls: no application protocol错误,本质是TLS-ALPN挑战无法通过ngrok透传。ngrok免费版会在云端终止TLS连接,不会将TLS握手时的ALPN扩展信息传递到本地应用,导致Let's Encrypt的验证服务器无法完成TLS-ALPN协议的验证流程。
正确测试步骤
改用HTTP-01验证方式(Let's Encrypt支持的另一种域名所有权验证方法),步骤如下:
修改示例应用配置
在项目的Program.cs中,调整LettuceEncrypt的配置,强制使用HTTP-01挑战:builder.Services.AddLettuceEncrypt() .UseHttpChallenge() // 跳过TLS-ALPN,改用HTTP验证 .RegisterCertificateForDomain("你的ngrok临时域名"); // 替换成ngrok生成的域名确保应用监听80端口
- 打开
launchSettings.json,将applicationUrl设置为包含http://*:80,比如:"applicationUrl": "http://*:80;https://*:443" - 或者启动应用时添加命令行参数:
dotnet run --urls http://*:80
- 打开
启动ngrok转发
运行命令:ngrok http 80复制终端中生成的临时域名(类似
t79b-149-167-20-95.ngrok-free.app),替换到步骤1的RegisterCertificateForDomain参数中,重启应用。等待验证完成
应用重启后,LettuceEncrypt会自动向Let's Encrypt发起证书申请,HTTP-01挑战请求会通过ngrok转发到本地应用的80端口,应用会自动处理/.well-known/acme-challenge/路径的验证请求,完成域名所有权验证后生成证书。
额外注意事项
- ngrok免费版的域名是临时的,每次重启ngrok都会更换,需要重新更新应用配置中的域名。
- 确保本地防火墙没有拦截80端口的入站请求,ngrok需要能正常访问你的本地应用80端口。
内容的提问来源于stack exchange,提问作者Patola
相关产品推荐
相关产品推荐

