使用HttpsOTAUpdate从GCS下载ESP32固件时如何获取正确的TLS证书
GCS HTTPS OTA 证书错误解决方法
错误根因
你当前使用的Let's Encrypt X3根证书已于2021年正式过期,TLS握手时触发证书校验失败,所以返回mbedtls_ssl_handshake returned -0x2700错误。
获取GCS有效根证书的操作步骤
- 通过openssl命令导出当前有效的GCS根证书
- 打开本地电脑的终端工具,执行命令:
openssl s_client -showcerts -connect storage.googleapis.com:443 </dev/null - 在返回的输出内容末尾,找到最后一段从
-----BEGIN CERTIFICATE-----到-----END CERTIFICATE-----的内容,这就是GCS所用的根证书 - 将这段内容替换代码中
server_certificate变量的内容,注意每一行末尾添加\n转义符,字符串拼接格式和原代码保持一致即可。
- 打开本地电脑的终端工具,执行命令:
必做校验项
TLS证书校验依赖系统时间,必须先同步ESP32的本地时间,否则即便证书正确也会校验失败。你可以在WiFi连接成功后、启动OTA之前添加NTP时间同步代码,示例如下:
// 东八区时间,可根据自己所在时区调整偏移 configTime(8 * 3600, 0, "pool.ntp.org", "cn.ntp.org.cn"); struct tm timeinfo; // 等待时间同步完成 while (!getLocalTime(&timeinfo)) { Serial.println("等待NTP时间同步..."); delay(1000); } Serial.printf("同步后时间: %d-%02d-%02d %02d:%02d:%02d\n", timeinfo.tm_year + 1900, timeinfo.tm_mon + 1, timeinfo.tm_mday, timeinfo.tm_hour, timeinfo.tm_min, timeinfo.tm_sec);
完成以上操作后重新编译烧录即可正常完成OTA握手。
内容的提问来源于stack exchange,提问作者Nico
相关产品推荐
相关产品推荐

