TLS隧道
HTTPS隧道使用ngrok.com证书终止ngrok.com服务器上的所有TLS(SSL)流量。 对于生产级服务,您需要使用自己的TLS密钥和证书对您的隧道流量进行加密。 ngrok使这个特别容易与TLS隧道。
将TLS流量转发到端口443上的本地HTTPS服务器
ngrok tls -subdomain=encrypted 443
一旦你的隧道运行,尝试访问它与curl。
curl --insecure https://encrypted.ngrok.io
TLS隧道没有证书警告
注意 --insecure
选项在前面的curl
命令示例中? 您需要指定,因为您的本地HTTPS服务器没有必要的TLS密钥和证书来终止任何ngrok.io子域的流量。 如果您尝试在网络浏览器中加载该网页,您会注意到它告诉您该网页可能不安全,因为证书不匹配。
如果你希望你的证书匹配和保护免受中间人攻击,你需要两件事。 首先,您需要为您拥有的域名购买SSL(TLS)证书,并配置本地Web服务器以使用该证书及其私钥来终止TLS连接。 如何执行此操作是特定于您的Web服务器和SSL证书提供程序,并超出本文档的范围。 为了举例,我们假设您为域secure.example.com
发出了SSL证书。 .
一旦你有你的密钥和证书,并正确安装,现在是时候运行一个TLS隧道在自己的自定义域名。 设置此的说明与HTTP隧道部分:自定义域中的隧道中描述的相同。 您注册的自定义域应与SSL证书(secure.example.com
)中的自定义域相同。 设置自定义域后,请使用-hostname
参数在您自己的域上启动TLS隧道。
通过您自己的自定义域转发TLS流量n
ngrok tls -hostname=secure.example.com 443
终止TLS连接
您尝试公开的服务可能无法终止TLS连接。 ngrok客户端可以为您执行此操作,以便您可以加密端到端的流量,但不必担心本地服务是否具有TLS支持。 同时指定 -crt
and -key
命令行选项来指定TLS证书和密钥的文件系统路径,ngrok客户端将为您处理终止TLS连接。
卸载TLS终止到ngrok客户端
ngrok tls -hostname secure.example.com -key /path/to/tls.key -crt /path/to/tls.crt 80
通过TLS隧道运行非HTTP服务
ngrok TLS隧道对所传输的底层协议没有假设。 本文档中的所有示例都使用HTTPS,因为它是最常见的用例,但您可以通过TLS隧道运行任何TLS封装协议(例如imaps,smtps,sips等),而不进行任何更改。
兼容的客户端
TLS隧道通过检查传入TLS连接上的服务器名称信息(SNI)扩展中存在的数据来工作。 并非所有启动TLS连接的客户端都支持设置SNI扩展数据。 这些客户端将无法与ngrok的TLS隧道正常工作。 幸运的是,几乎所有的现代浏览器都使用SNI。 一些现代软件库没有。 以下客户端列表不支持SNI,不能使用TLS隧道:
- Microsoft Internet Explorer 6.0
- Microsoft Internet Explorer 7 & 8 on Windows XP or earlier
- Native browser on Android 2.X
- Java <=1.6
- Python 2.X, 3.0, 3.1 if required modules are not installed
更完整的列表可以在维基百科的服务器名称指示页面找到