You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为Cloudfront分发的Flutter应用配置无警告的HTTPS Flask本地服务器

解决方案:基于AWS ACM私有CA实现Jetson Flask服务无警告HTTPS

核心思路

由于你的IoT设备使用jetson.local这类mDNS本地域名,且常处于无公网环境,无法使用公网CA(如Let's Encrypt)完成域名验证。最适配需求的方案是使用AWS ACM私有CA签发本地域名证书,同时引导用户一次性信任私有CA根证书,即可实现无浏览器安全警告的HTTPS访问,全程依赖AWS原生资源管理。


步骤1:创建AWS ACM私有CA

  1. 登录AWS控制台,进入ACM私有CA服务,创建根CA(内部场景下根CA足够,无需子CA):
    • 配置CA名称(如IoT-Device-Root-CA),选择RSA 2048或ECC证书算法
    • 启用证书撤销列表(CRL)(可选,若设备长期无网可跳过,避免 revocation check失败)
  2. 激活根CA:完成AWS身份验证后,根CA状态变为ACTIVE。

步骤2:为jetson.local签发私有证书

  1. 在ACM控制台中,选择请求证书 → 私有证书
  2. 输入域名jetson.local(若有多台设备,可输入*.local覆盖所有本地设备域名)
  3. 选择你创建的根CA作为签发机构,提交请求后等待证书签发完成。

步骤3:部署证书到Jetson Flask服务器

  1. 从ACM控制台下载证书文件:
    • 服务器证书(server.crt)
    • 私钥(server.key)
    • 证书链(包含根CA证书,保存为ca_chain.crt)
  2. 将三个文件上传到Jetson设备的指定目录(如/opt/flask_ssl/)
  3. 配置Flask启用HTTPS:
    开发/测试用Flask内置服务器:
    from flask import Flask, send_file
    
    app = Flask(__name__)
    
    @app.route('/getImage')
    def get_image():
        return send_file('/path/to/device/image.jpg', mimetype='image/jpeg')
    
    if __name__ == '__main__':
        # 指定证书文件路径
        app.run(
            ssl_context=('/opt/flask_ssl/server.crt', '/opt/flask_ssl/server.key'),
            host='0.0.0.0',
            port=5000
        )
    
    生产环境建议用Gunicorn(更稳定):
    gunicorn --certfile=/opt/flask_ssl/server.crt \
             --keyfile=/opt/flask_ssl/server.key \
             --bind 0.0.0.0:5000 \
             app:app
    

步骤4:引导用户信任私有CA根证书

浏览器仅信任预装的公网CA,因此需要用户一次性安装AWS ACM私有CA的根证书:

  1. 从ACM控制台下载根CA的PEM格式证书
  2. 在你的Flutter Web应用中添加引导流程:
    • 当用户连接设备WiFi后,提示用户下载根证书
    • 指导用户将证书安装到系统(Windows/macOS/iOS/Android)或浏览器的信任根证书库中
    • 安装完成后,浏览器访问https://jetson.local:5000将不再触发安全警告

替代方案:AWS IoT Core设备证书(适配IoT场景)

如果你的Jetson设备已接入AWS IoT Core,可复用IoT Core的设备证书:

  1. 在AWS IoT Core中为设备创建证书,添加jetson.local作为证书的SAN(主题备用名称)
  2. 将IoT Core的设备证书、私钥和根CA证书(Amazon Root CA 1)部署到Jetson
  3. 配置Flask使用该证书启用HTTPS,用户只需信任Amazon Root CA 1(多数浏览器已预装,无需额外安装)

注意:此方案要求设备在首次注册时联网,后续无网环境可正常使用。


关键注意事项

  • 若设备长期无网,建议关闭ACM私有CA的CRL功能,避免浏览器因无法访问CRL服务器而拒绝证书
  • jetson.local依赖mDNS服务,确保Jetson设备已启用Avahi(多数Linux发行版默认预装)
  • 生产环境避免使用Flask内置服务器,改用Gunicorn/Nginx等稳定的Web服务器

内容的提问来源于stack exchange,提问作者Blake Edwards

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:48:18