ESP32设备基于FreeRTOS与AWS OTA的代码签名证书更新方案咨询
解决方案:AWS IoT + FreeRTOS OTA 证书轮换与信任链配置
1. 替换硬编码单证书为信任链
不要在设备中烧录单个代码签名证书,改为烧录AWS私有根CA(或中间CA)证书。只要后续的代码签名证书由该根/中间CA签发,设备就能自动完成验证,无需重新烧录设备。
- 操作步骤:
- 通过AWS Certificate Manager (ACM) 创建私有根CA,或导入现有私有CA。
- 从根CA签发代码签名专用的中间CA(推荐分层架构,后续轮换中间CA时无需改动根CA)。
- 设备端硬编码根CA证书(可设置长达20年的有效期),而非单个签名证书。
2. 配置代码签名证书的必要扩展
代码签名证书必须包含特定X.509扩展,才能被AWS IoT OTA识别:
需添加
codeSigning扩展(OID:1.3.6.1.4.1.37585.2.1.1),值设为TRUE。确保
Key Usage包含Digital Signature,Extended Key Usage包含Code Signing(OID:1.3.6.1.5.5.7.3.3)。用ACM CLI签发证书时添加扩展的示例:
aws acm-pca issue-certificate \ --certificate-authority-arn arn:aws:acm-pca:region:account:certificate-authority/ca-id \ --csr file://code-signing-csr.pem \ --signing-algorithm "SHA256WITHRSA" \ --validity Value=365,Type=DAYS \ --extensions file://extensions.json
对应的extensions.json内容:
{ "KeyUsage": { "DigitalSignature": true }, "ExtendedKeyUsage": [ { "OID": "1.3.6.1.5.5.7.3.3" } ], "CustomExtensions": [ { "OID": "1.3.6.1.4.1.37585.2.1.1", "Value": "TRUE", "Critical": false } ] }
3. 配置AWS IoT OTA签名与设备端验证
- AWS IoT控制台配置:
进入IoT Core > 管理 > OTA更新 > 签名配置,创建新配置并关联签发的代码签名证书,将验证策略设为「信任CA链」。 - 设备端FreeRTOS配置:
修改ota_config.h,启用CONFIG_OTA_VERIFY_CERTIFICATE_CHAIN宏,将硬编码的单个签名证书替换为根CA证书。
4. 证书轮换流程
当代码签名证书过期/吊销时:
- 从同一根/中间CA签发新的代码签名证书。
- 更新AWS IoT签名配置为新证书,后续OTA更新用新证书签名即可,设备无需任何改动。
若需轮换中间CA:
- 用根CA签发新的中间CA,直接用新中间CA签发签名证书,设备会通过根CA自动验证;或通过OTA推送新中间CA证书到设备。
5. 常见问题排查
- 证书扩展不匹配:用
openssl x509 -in cert.pem -text -noout检查是否包含codeSigning扩展和代码签名EKU。 - AWS IoT不识别证书:确保证书由ACM PCA签发,并已在IoT Core中注册/关联。
- 设备验证失败:检查设备端根CA证书是否正确,FreeRTOS OTA库是否启用了CA链验证。
内容的提问来源于stack exchange,提问作者mindlis
相关产品推荐
相关产品推荐

