You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OpenSSL生成证书后ESP32 HTTPS服务器无法连接问题排查

问题分析与解决方案

核心错误原因

服务器端日志中的-0x7780对应MBEDTLS的MBEDTLS_ERR_SSL_HANDSHAKE_FAILED,结合浏览器的SEC_ERROR_BAD_SIGNATURE错误,大概率是以下两个问题:

  1. 自制证书使用了已被弃用的签名算法(如SHA1),导致浏览器和mbedtls拒绝认可
  2. 证书与私钥不匹配

具体排查与修复步骤

1. 重新生成符合要求的证书

你的openssl生成命令未指定签名算法,旧版本openssl默认使用SHA1,而SHA1已被现代浏览器和mbedtls禁用。修改命令,指定SHA256签名算法,同时建议将CN设置为ESP32的访问IP(如192.168.1.100):

openssl req -newkey rsa:2048 -nodes -keyout prvtkey.pem -x509 -days 3650 -out cacert.pem -subj "/CN=192.168.1.100" -sha256

2. 验证证书与私钥的匹配性

生成后,用以下命令确认证书和私钥的模数一致(确保两者配对):

# 提取证书模数并计算MD5
openssl x509 -noout -modulus -in cacert.pem | openssl md5
# 提取私钥模数并计算MD5
openssl rsa -noout -modulus -in prvtkey.pem | openssl md5

两个命令输出的MD5值必须完全相同,否则需重新生成。

3. 确认证书格式与上传路径

  • 检查证书和私钥的PEM格式:确保文件头部为-----BEGIN CERTIFICATE-----(证书)和-----BEGIN PRIVATE KEY-----(私钥),与官方提供的证书格式一致
  • 确认ESP32代码中,HTTPS服务器配置的cacert_pem和prvtkey_pem路径正确指向你上传的证书文件(例如SPIFFS/FATFS中的路径)

4. 验证证书有效性

用以下命令查看证书详细信息,确认签名算法为SHA256withRSA,且有效期、主体信息正常:

openssl x509 -in cacert.pem -text -noout

完成以上步骤后,重新上传证书到ESP32,即可正常建立HTTPS连接。

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:00:20