- https://free.3v.do可申请免费空间(1000M)及域名->无SSL
- 使用CuteFTP软件可快速将网页上传至服务器
- github仓库设置页的page选项可将指定分支的index.html变为公网网页(域名:<仓库名>.github.io)->https
- github提供了自定义域名的选项,可绑定自己的国外域名,但SSL证书需要自己申请,操作如下:
- 注册域名:https://www.namesilo.com,低价,国外域名
- 在域名的Manager DNS页面中添加A记录(推荐,可减少重定向次数)或者CNAME
- DNS的IPV4地址如下:
- 185.199.108.153
- 185.199.109.153
- 185.199.110.153
- 185.199.111.153
- DNS的IPV4地址如下:
- 生成SSL:https://dash.cloudflare.com/,将域名添加到cloudflare的管控下,你会获得两个cloudflare服务商域名。需注意如下几点:
- 需要在域名注册商处将NameSevers修改为你的得到的服务商域名,使流量流经cloudflare
- 成功加入管制后需进入SSL设置页将SSL状态由灵活改为全面(解决重定向次数过多导致网页无法访问的问题)
- 进入页面规则页设置始终使用https(让你的网站更安全,并解决输入域名默认http访问的情况)
- 将域名添加到github的自定义域名项,等待审核(需数小时,可能会报错,不用管)
- 勾选Enforce https
- 服务器的直接挂载因网速原因无法满足我们对帧率的要求,因此我们使用本机作为服务器,从而由公网转向了内网
- flask运行会生成局域网IP,为http
- 只有安全的https或信任的http才能调用用户设备,我希望直接将http变成https来省去信任的步骤
- 使用ngrok:https://dashboard.ngrok.com/,免费,下载并指定本地端口进行穿透->https,静动态域名,不可自定义
- 使用NATAPP(不推荐,Flask通信出错):https://natapp.cn/,有免费和付费通道。免费通道只支持http,付费通道可购买具有SSL证书的自定义域名
- 官方入门教程:NATAPP快速开始
-
制作自签SSL
- 安装opensslWindows64/32 openssl便捷安装包
- 生成自签名证书
-
使用flask工具及cryptography包实现自签名SSL
- 安装cryptography包
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple cryptography
- flask运行时指定ssl_context参数为'adhoc'
app.run(ssl_context='adhoc')
- 缺点:找不到自签名证书位置,无法将其添加至浏览器信任列表
- 安装cryptography包
-
注意:
- 浏览器大多把自签名SSL生成的https视为危险,需在浏览器设置的证书管理栏信任CA证书
- 未信任时,自签SSL在本地端口的https访问可在用户手动确认后访问到用户设备,但在其他情况浏览器会直接拒绝站点访问
-
步骤
- 在cloudflare服务商处为域名增加流量管控及SSL加密
链接:https://dash.cloudflare.com/ - flask后端使用服务商SSL证书(阿里云)生成https服务,端口443
- 使用域名发起https访问,成功,无连接安全警告
- 在cloudflare服务商处为域名增加流量管控及SSL加密
-
局限
- 这样的做法形式上达到了目的,但由于流量加密及cloudflare服务商远在美国,网速不理想(环境识别语音播报约有10s额外延时)。
我们明白了不须DNS解析的IP访问才是最迅速的 - 需使用港澳台或境外服务器避免域名备案难关,成本高,难较长期维持
- 这样的做法形式上达到了目的,但由于流量加密及cloudflare服务商远在美国,网速不理想(环境识别语音播报约有10s额外延时)。
-
实现方法
- 注册国内域名并申请SSL证书,下载证书(pem\key格式)
- 在flask的app.run()或soketio.run()中添加ssl_context=('path/to/YOUR_PEM.pem', 'path/to/YOUR_KEY.key')
- 指定端口为443
- 浏览器使用https访问公网IP,成功,虽然仍存在连接风险警告
-
一些探索
- 这里的SSL证书如果使用自签名证书或本机证书来代替服务商证书(如阿里云SSL)则会导致部分浏览器无法访问IP(在Android版Edge上失败),可能是加密方式的原因
- 这里没有将证书加入到IIS服务器中,而是直接用flask调取,坏处是没法使用域名访问, 好处是解决了端口占用的问题
- 我当时用的是香港服务器,在作了上述配置后,我希望用域名通过https访问后端程序,具体是:https://pineapplesnowy.top,但失败。
我又试着将后端端口换为80,并用域名访问,具体是:https://pineapplesnowy.top:80。失败。
但是当我将后端换为http时获得了成功。
此前我已经在服务器商处放行了443 80 5000端口,不是安全组的问题