3分钟搞定ngrok泛域名证书:从申请到部署全流程

【免费下载链接】ngrok Introspected tunnels to localhost 【免费下载链接】ngrok 项目地址: 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)
  • 一次配置即可用于多个项目
  • 避免频繁更换证书的麻烦

准备工作

在开始之前,请确保你的服务器满足以下条件:

  1. 拥有一个已注册的域名(如example.com)
  2. 服务器已安装Docker环境(推荐)
  3. 域名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服务端启动时提示证书加载失败,请检查:

  1. 证书文件路径是否正确
  2. 证书和私钥文件权限是否正确
  3. 证书是否包含完整的证书链

相关代码可参考src/ngrok/server/tls.go中的LoadTLSConfig函数实现。

DNS验证失败

若Certbot DNS验证失败,请检查:

  1. TXT记录是否正确添加
  2. DNS记录是否已生效(可使用nslookup -type=TXT _acme-challenge.example.com验证)
  3. 是否有防火墙阻止了DNS查询

总结

通过本文的步骤,你已成功为ngrok配置了泛域名证书,实现了安全可靠的内网穿透服务。这一方案不仅适用于开发环境,也可用于小型生产环境的临时服务暴露。

官方自托管文档docs/SELFHOSTING.md中还提供了更多高级配置选项,如自定义端口、设置密码认证等,感兴趣的读者可以进一步探索。

希望本文对你有所帮助,如果有任何问题或建议,欢迎在评论区留言讨论!

【免费下载链接】ngrok Introspected tunnels to localhost 【免费下载链接】ngrok 项目地址: https://gitcode.com/gh_mirrors/ng/ngrok

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐