14.4.2. 前置条件:OpenSSL 与时钟

在动手实践的各个页面能够正常工作之前,有两样东西必须就位:开发机上的 OpenSSL 命令行工具,以及在每一次 TLS 握手发生的那一刻摄像头上都拥有正确的时钟。

14.4.2.1. 安装 OpenSSL

本节中的命令使用 openssl 命令行工具,它运行在你的开发机上——而不是摄像头上。它通常已经安装好了;可以通过以下命令检查:

openssl version

如果它缺失,请针对你的操作系统进行安装:

  • Linux —— 使用包管理器,例如 sudo apt install openssl(Debian/Ubuntu)、sudo dnf install openssl(Fedora/RHEL)或 sudo pacman -S openssl(Arch)。

  • macOS —— 使用 Homebrew 执行 brew install openssl

  • Windows —— 安装诸如 Win32/Win64 OpenSSL 之类的构建版本,使用包管理器(winget install ShiningLight.OpenSSL.Lightchoco install openssl),或者使用 Git for Windows 自带的 openssl(从 Git Bash 中运行它)。

14.4.2.2. 设置时钟

ssl.CERT_REQUIRED 会检查每张证书的有效期,因此摄像头的时钟必须正确,否则验证会失败(一台刚上电的摄像头根本不知道现在是什么时间)。在网络连接正常的情况下,ntptime 模块会通过 NTP 获取时间,并以 UTC 设置板载 RTC(machine.RTC):

import ntptime

ntptime.settime()                 # query NTP and set machine.RTC (UTC)

完成这一步后,time.localtime()machine.RTC 便会反映当前的 UTC 时间。启用网络接口的方式因板而异,此处不予展示;后续页面中的示例均假定摄像头已经连上了网络。