乐鑫技术交流
直播中

chunhuahua

9年用户 1362经验值
擅长:接口/总线/驱动
私信 关注
[问答]

编写了一个简单的SSL应用程序,用于向服务器发送HTTPS请求,SSL握手失败的原因?

我编写了一个简单的SSL应用程序,用于向服务器发送HTTPS请求。在数千个请求之后,应用程序在握手期间崩溃:

客户端握手开始。
型号:M 1032
致命异常 29 (StoreProhibitedCause) :
epc1=0x4000e1b2、epc2=0x00000000、epc3=0x00000000、excvaddr=0x00000004、depc=0x00000000

ets Jan  8 2013,rst cause:2, boot mode:(1,6)

ets Jan  8 2013,rst cause:4, boot mode:(1,6)

WDT 复位

此时,没有任何内容不再运行,应用程序未正确重新启动。

我尝试使用 objdump 反汇编我的程序,以查看哪个指令在 epc1=0x4000e1b2 时失败。但是这个地址似乎在BOOT ROM部分,根据http://esp8266-re.foogod.com/wiki/memory_map.

另一点是,在每次请求之后,我都会收到错误:

客户端数据无效协议
错误:SSL 错误 3

但它不会停止程序执行。我不知道这些错误意味着什么,因为它们是由 SDK 打印的,我没有找到任何关于它的文档。



回帖(1)

周煌煦

2024-7-10 17:53:26
SSL握手失败可能有多种原因。以下是一些可能的原因和解决方案:

1. **证书问题**:确保服务器的SSL证书有效且未过期。如果证书是自签名的,请确保客户端信任该证书。

2. **协议不兼容**:检查客户端和服务器支持的SSL/TLS协议版本是否兼容。例如,如果服务器仅支持TLS 1.2,而客户端尝试使用TLS 1.0进行连接,则握手将失败。

3. **密码套件不匹配**:确保客户端和服务器支持相同的密码套件。如果密码套件不匹配,握手将失败。

4. **资源限制**:如果系统资源有限(如内存或CPU),SSL握手可能会失败。尝试优化代码或增加系统资源。

5. **网络问题**:检查网络连接是否稳定。不稳定的网络连接可能导致握手失败。

6. **代码错误**:检查您的SSL应用程序代码,确保正确实现了SSL握手过程。例如,确保正确初始化SSL上下文、配置证书和私钥等。

关于您提到的错误信息,`fatal exception 29 (StoreProhibitedCause)` 通常与内存访问违规有关。这可能是由于以下原因:

1. **内存越界**:检查您的代码,确保没有数组越界或错误的内存访问。

2. **堆栈溢出**:确保您的函数调用没有导致堆栈溢出。检查递归调用和其他可能导致堆栈溢出的代码。

3. **内存泄漏**:检查您的代码,确保没有内存泄漏。使用内存分析工具(如Valgrind)来检测内存泄漏。

4. **硬件问题**:如果问题持续存在,可能是硬件故障。尝试在不同的硬件上运行您的应用程序。

要进一步诊断问题,您可以使用调试器(如GDB)来分析程序的执行过程,并在崩溃点设置断点。这将帮助您找到导致错误的具体代码行。同时,您可以使用`objdump`反汇编您的程序,以便更深入地了解程序的执行过程。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分