3分钟搞定ngrok泛域名证书:从申请到部署全流程
3分钟搞定ngrok泛域名证书:从申请到部署全流程
【免费下载链接】ngrok Introspected tunnels to localhost 项目地址: https://gitcode.com/gh_mirrors/ng/ngrok
你是否还在为本地开发环境暴露到公网而烦恼?是否因自签名证书导致浏览器安全警告而头疼?本文将带你使用Certbot工具快速获取免费的Let's Encrypt泛域名证书,并配置到ngrok服务中,彻底解决本地服务外网访问难题。
读完本文你将掌握:
- 泛域名证书(Wildcard Certificate)的申请方法
- Certbot工具的安装与使用
- ngrok服务端证书配置步骤
- 客户端连接自定义ngrok服务的方法
为什么需要泛域名证书?
ngrok作为一款强大的内网穿透工具,其核心功能是创建从公网到本地服务器的安全隧道(Tunnels)。官方文档docs/SELFHOSTING.md中明确指出,ngrok通过TLS(Transport Layer Security,传输层安全协议)提供加密隧道,因此必须配置SSL证书。
泛域名证书的优势在于:
- 支持同一域名下所有子域名(如*.example.com)
- 一次配置即可用于多个项目
- 避免频繁更换证书的麻烦
准备工作
在开始之前,请确保你的服务器满足以下条件:
- 拥有一个已注册的域名(如example.com)
- 服务器已安装Docker环境(推荐)
- 域名DNS解析已指向你的服务器IP
使用Certbot申请泛域名证书
安装Certbot
Certbot是Let's Encrypt提供的免费证书申请工具,支持多种操作系统。在Ubuntu系统上,可通过以下命令安装:
sudo apt update && sudo apt install certbot
申请泛域名证书
使用以下命令申请泛域名证书,将example.com替换为你的域名:
sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com
执行过程中,Certbot会要求你在域名的DNS记录中添加一条TXT记录以验证域名所有权。按照提示完成DNS配置后,稍等几分钟让DNS记录生效。
成功申请后,证书文件将保存在以下路径:
- 证书文件:
/etc/letsencrypt/live/example.com/fullchain.pem - 私钥文件:
/etc/letsencrypt/live/example.com/privkey.pem
配置ngrok服务端
编译ngrok服务端
首先,从Git仓库克隆ngrok源代码:
git clone https://gitcode.com/gh_mirrors/ng/ngrok.git
cd ng/ngrok
编译服务端二进制文件:
make release-server
配置证书路径
ngrok服务端的TLS配置逻辑位于src/ngrok/server/tls.go文件中。该文件定义了LoadTLSConfig函数,负责加载证书和私钥。
使用以下命令启动ngrok服务端,指定证书路径和域名:
./bin/ngrokd -tlsKey="/etc/letsencrypt/live/example.com/privkey.pem" -tlsCrt="/etc/letsencrypt/live/example.com/fullchain.pem" -domain="example.com"
参数说明:
-tlsKey:私钥文件路径-tlsCrt:证书文件路径-domain:你的域名
配置ngrok客户端
创建配置文件
在客户端创建或修改ngrok配置文件~/.ngrok:
server_addr: example.com:4443
trust_host_root_certs: true
连接到自定义ngrok服务
使用以下命令启动客户端,将本地80端口映射到公网:
ngrok -config=~/.ngrok 80
验证配置
成功连接后,你将看到类似以下的输出:
Tunnel Status online
Version 1.7/1.7
Forwarding http://xxx.example.com -> 127.0.0.1:80
Forwarding https://xxx.example.com -> 127.0.0.1:80
Web Interface 127.0.0.1:4040
# Conn 0
Avg Conn Time 0.00ms
访问Web Interface(127.0.0.1:4040)可查看隧道状态和请求日志。
证书自动续期
Let's Encrypt证书有效期为90天,可通过以下命令设置自动续期:
echo "0 0 1 * * root certbot renew --quiet && systemctl restart ngrokd" | sudo tee -a /etc/crontab
常见问题解决
证书加载失败
如果ngrok服务端启动时提示证书加载失败,请检查:
- 证书文件路径是否正确
- 证书和私钥文件权限是否正确
- 证书是否包含完整的证书链
相关代码可参考src/ngrok/server/tls.go中的LoadTLSConfig函数实现。
DNS验证失败
若Certbot DNS验证失败,请检查:
- TXT记录是否正确添加
- DNS记录是否已生效(可使用
nslookup -type=TXT _acme-challenge.example.com验证) - 是否有防火墙阻止了DNS查询
总结
通过本文的步骤,你已成功为ngrok配置了泛域名证书,实现了安全可靠的内网穿透服务。这一方案不仅适用于开发环境,也可用于小型生产环境的临时服务暴露。
官方自托管文档docs/SELFHOSTING.md中还提供了更多高级配置选项,如自定义端口、设置密码认证等,感兴趣的读者可以进一步探索。
希望本文对你有所帮助,如果有任何问题或建议,欢迎在评论区留言讨论!
【免费下载链接】ngrok Introspected tunnels to localhost 项目地址: https://gitcode.com/gh_mirrors/ng/ngrok
更多推荐




所有评论(0)