情景:原先已有ngrok进行内外网映射,能正常使用http与https(具体可参考  ④这篇文章

需求:要在微信打开已有项目链接,需要使用合法的https(自签名证书实践证明无效)

解决步骤:

①根据这篇文章签发阿里云证书后,尝试对ngrok进行更改配置并重启。由于一开始对ngrok仅限于简单的部署与使用,根据网上搜索的添加-tlsKey与-tlsCrt参数指定证书后,尝试重启ngrok的服务端与客户端,发现有各种报错。同时在域名检测网站发现证书并没有被替换,使用的还是之前的自签名证书

②在多次搜索阅读相关文档之后,发现ngrok的客户端是自带证书的(也就是编译好内嵌在里面一样),因此尝试重新构建ngrok。构建ngrok使用到github的一些项目因此很缓慢,后面根据  这篇文章在gitee拉取相关项目后重构

③在构建以后发现,假设阿里云签发证书的域名是aaa.ngrok.com,那么当你映射一个内部https链接的时候必然需要加上后缀,也就是test.aaa.ngrok.com,这样又会在域名检测网站出现以下问题

 ④在网上搜索文章没有很大收获,我决定自己挨个尝试

前提:

        证书域名:aaa.ngrok.com

        ngrok服务端启动命令中 -domain="aaa.ngrok.com"

在ngrok服务端的启动命令中,根据以上条件去启动则会出现上一步的错误。因此我尝试把-domain更改为:ngrok.com 同时在客户端的配置文件中把server_addr更改为:ngrok.com(原先也是a

aa.ngrok.com),但是会发现服务端能接收到信息但是无法进行ngrok映射,处于reconnecting状态

在抱着尝试的心态,我尝试直接把客户端的server_addr改回原先的aaa.ngrok.com,重新启动ngrok的客户端,发现可以成功映射,并且外网网址也和我申请的阿里云证书上保持一致

⑤我再去域名检测网站查询我的网址,也变成了可信状态

 

根据以上情况,我目前对ngrok的有以下几点总结:

(1) 当我们的ngrok需要替换域名的时候,我们需要重新构建ngrok(因为ngrok的客户端内嵌有证书,如果不重新构建就会沿用以前的证书)

(2)在使用阿里云免费SSL证书的时候,我们选择其他证书,下载以后有.pem和.key文件。

        pem文件替换掉ngrok自带的assets/server/tls/snakeoil.crt与assets/client/tls/ngrokroot.crt

        key文件则替换掉ngrok自带的assets/server/tls/snakeoil.key

        然后对ngro进行重新构建即可

(3)ngrok服务端启动命令中的-domain只是作为映射地址的一个可自定义字段(需要DNS能够解析,可以自行在阿里云添加),而ngrok服务端中的server_addr属性值则需要与申请证书的域名保持一致才能搭建起链接

Logo

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

更多推荐