使用OpenSSL生成证书后ESP32 HTTPS服务器无法连接问题排查
问题分析与解决方案
核心错误原因
服务器端日志中的-0x7780对应MBEDTLS的MBEDTLS_ERR_SSL_HANDSHAKE_FAILED,结合浏览器的SEC_ERROR_BAD_SIGNATURE错误,大概率是以下两个问题:
- 自制证书使用了已被弃用的签名算法(如SHA1),导致浏览器和mbedtls拒绝认可
- 证书与私钥不匹配
具体排查与修复步骤
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
相关产品推荐
相关产品推荐

