AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 79290534
Accepted
SzalonyKefir98
SzalonyKefir98
Asked: 2024-12-18 17:03:45 +0800 CST2024-12-18 17:03:45 +0800 CST 2024-12-18 17:03:45 +0800 CST

ESP32 TLS 证书更新

  • 772

我的公司将在其设备中使用 ESP32。我必须编写允许从 HTTPS 服务器下载 ESP32 OTA 更新的代码。TLS 服务器的根证书每年过期一次。我的问题是:如果证书已过期,我如何安全地从服务器下载新证书?如果证书过期,我将失去对 ESP 的远程控制,无法向其上传新文件。例如,据我所知,Chrome 或 Firefox 等 Web 浏览器会更新其 CA 存储,而用户甚至不会注意到这一点。是否可以在 ESP32 上实现该功能?

我唯一的想法是连接到第二个使用 HTTP 而非 HTTPS 的网站,然后下载新证书。但我必须一直使用 TLS,所以这个解决方案是不可接受的。我是网络技术的新手,非常感谢您的帮助和提示!

ssl
  • 1 1 个回答
  • 31 Views

1 个回答

  • Voted
  1. Best Answer
    Tarmo
    2024-12-18T19:34:37+08:002024-12-18T19:34:37+08:00

    您确定服务器使用的是根证书,而不是某个中间证书吗?浏览器和嵌入式设备之间的区别在于,无论您当前的版本有多旧,您仍然可以使用简单的离线安装程序更新浏览器。对于嵌入式设备,OTA 服务器是唯一的生命线 - 如果设备无法与服务器通信,则无法更新。它会变成僵尸,只能通过电缆进行更新,这通常是不可行的。

    如果您的嵌入式设备的 OTA 依赖于具有 1 年根证书的 PKI,我会说您处境不好。这要求每个设备在前一个根证书轮换之前无一例外地更新其根证书,任何留下的设备都是僵尸。如果您确定可以在截止日期之前更新所有设备,请继续这样做。注意那些几个月没有互联网访问的设备(例如,因为它们放在仓库里)。

    以下是我按照个人偏好顺序列出的解决方案:

    1. 创建一个嵌入式 PKI,其根证书有效期为 50 年。使用中间证书(由根证书签名)保护所有 Web 资产 - 这些证书可以随时轮换。每台设备都有 50 年的根证书,并且可以验证任何中间证书,无论这些证书轮换的频率如何。请注意,如果需要,您仍然可以通过 OTA 轮换根证书,只是在更受控制的情况下才会轮换。
    2. 否则,创建一个并行 PKI,其根证书有效期为 50 年。然后使用它来更新 OTA 证书,使用任何可用的方法(即使通过短信发送也是一种选择,只要您可以使用根证书验证传入的内容)。这很愚蠢,但您为错过最后期限的设备保留了一些备用生命线。
    3. 放弃安全性并接受错过轮换期限的设备无需任何验证即可更新其证书。

    你可以用任意数字 X 替换 50 年,如果:

    • 您设备群中的每台设备都保证在 X 年后获得 OTA 更新
    • 您愿意考虑永久丢失所有 X 年内未上网的设备

    我一直在努力寻找有关 X.509 证书和链的优质参考资料(谷歌搜索结果中 90% 都是浅显的销售文章)。我可以向您推荐一篇文章《图解 X.509 证书》和维基百科页面

    • 1

相关问题

  • traefik acme http challenge 得出“没有默认证书,回退到内部生成的证书”

  • 有没有办法以 32 字节数据包的形式安全地传输数据(TLS 版本)?

  • SSLStream 客户端证书用途

  • HTTPS/TLS/SSL 如何防止会话劫持?[复制]

  • 下面的 tls 握手,有什么问题吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    为什么这个简单而小的 Java 代码在所有 Graal JVM 上的运行速度都快 30 倍,但在任何 Oracle JVM 上却不行?

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    何时应使用 std::inplace_vector 而不是 std::vector?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Martin Hope
    Aleksandr Dubinsky 为什么 InetAddress 上的 switch 模式匹配会失败,并出现“未涵盖所有可能的输入值”? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge 为什么这个简单而小的 Java 代码在所有 Graal JVM 上的运行速度都快 30 倍,但在任何 Oracle JVM 上却不行? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini 具有指定基础类型但没有枚举器的“枚举类”的用途是什么? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer 何时应使用 std::inplace_vector 而不是 std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB 为什么 GCC 生成有条件执行 SIMD 实现的代码? 2024-02-17 06:17:14 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve