如何自动更新 Firebase 的指纹 (Arduino-Master-Library)

How automate the fingerprints updating of Firebase (Arduino-Master-Library)

提问人:JAWAD KHAN 提问时间:11/12/2023 更新时间:11/12/2023 访问量:28

问:

我在 ARDUINO 中使用 esp32 板开发了一个基于硬件的项目,我正在使用 firebase 将传感器的数据上传到 Firebase 实时数据库。我在硬件端使用“firebase-arduino-master”库。该项目工作正常,但几天后,Firebase 的指纹会定期更改,这导致我以物理方式重新打开产品外壳以手动更新硬件代码 (Arduino) 中的“firebase-arduino-master”库中的新指纹。我很好奇是否有可行的解决方案或方法可以自动执行此指纹更新过程,从而消除对产品的频繁物理访问的需要。

我附上了 firebase-arduino-master 库的屏幕截图,其中清楚地显示了指纹。此外,我还附上了我用来定期更新库中指纹的网站的屏幕截图。

屏幕截图1

library screenshot

....................................................................................................................................................................................................................................................................................

屏幕截图2

updated fingerprints website screenshot

Firebase Arduino HttpClient ESP32 ESP8266

评论

0赞 Philippe Signoret 11/12/2023
你指的是 firebase-arduino 库,还是别的什么?请附上您正在使用的库的链接。
0赞 JAWAD KHAN 11/12/2023
@PhilippeSignoret这里是我正在使用的 firebase 库的链接: github.com/FirebaseExtended/firebase-arduino
0赞 JAWAD KHAN 11/12/2023
@PhilippeSignoret指纹可以在以下路径中看到:src/FirebaseHttpClient.h
0赞 hcheung 11/12/2023
使用直到 2036 年才会过期的根 CA。
0赞 JAWAD KHAN 11/13/2023
@hcheung 您能否共享任何资源来将 CA 与 ESP 板集成?

答:

0赞 Philippe Signoret 11/12/2023 #1

证书指纹用于确保您要连接的数据库网址确实是您认为的合法 Firebase 数据库,而不是其他目标(例如,由恶意行为者托管,让您共享数据和凭据)。

固定到单个预期证书的指纹是一种简单的方法,可以跳过实现遵循证书信任链的更复杂的过程。但是,此策略依赖于证书本身永远不会更改,这对于任何现代云服务都是不现实的(也不推荐)。

此外,您正在使用的 firebase-arduino 库不再主动维护:

此存储库不再处于积极开发状态。不会添加任何新功能,也不会主动对问题进行会审。

图书馆的最后一次更新(截至 2023 年 11 月 12 日)是三年多前。查看库的未解决问题和未解决的拉取请求,其中许多都与你遇到的相同指纹问题有关,所有这些都被忽略了。

所有这些都表明该库可能被无限期地废弃,您不应该依赖它。

因此,由于您正在使用的开源库已被废弃,并且依赖于不可靠的证书验证策略,因此我建议您为项目选择不同的库。

在Arduino IDE的库管理器中搜索“Firebase”,我看到了很多选项。你应该选择哪一个?让我们从该列表中举两个例子(这些选择是任意的,我与它们中的任何一个都没有关联或经验),看看它们如何处理证书问题:

  • 适用于 ESP8266 和 ESP32 的 Firebase Arduino 客户端库 - 该库已经存在了大约一年(截至 2023 年 11 月),并且似乎正在积极维护。它包含一个示例,用于使用受信任的根证书访问 Firebase 实时数据库 (RTDB) 以验证安全连接。(根证书预计不会经常更新,示例中的证书将于 2036 年到期。有关更多详细信息,请参阅自述文件页面。

    该库似乎正在积极维护,并支持 TLS 证书验证,这两者都是积极的一点,也是您可能希望为您的项目考虑此(或类似)库的原因。

  • (名称省略) - 这个库非常新,GitHub 存储库只存在了几天。因为它太新了,所以还没有问题或拉取请求,所以很难说它是否会被积极维护。仔细看看它如何处理安全连接,我发现......事实并非如此。相反,它只是完全关闭证书验证:

    _httpsClient.setInsecure();
    

    该库是如此之新,并且它目前完全跳过证书验证这一事实都表明该库尚未成熟,您可能还想推迟依赖项。

    注意:这些是时间点观察结果,将来很可能会得到解决。为了保持这个答案在未来的相关性(并且不不公平地提到一个显然是新的和正在开发的库),我省略了库名称和链接。

重要说明:许多库和示例都禁用了证书验证。一般来说,这不是一个好主意,并且可能会带来重要的安全风险。我建议你花点时间尽早完成项目的这一部分,并避免将其推迟到以后(那时你可能已经忘记了你所走的捷径)。