目录
引言
最近尝试使用WS63星闪开发板的Mbedtls库访问华为云的DeepSeek服务,结果没有成功。到海思论坛上一看,发现不止我一个人遇到这个问题(技术论坛 | 海思社区),对这个问题进行了一些研究,分享一下研究结果。
故障分析
程序日志分析
程序在连接服务器后,返回的错误信息为:
TLS handshake failed: mbedtls error: -0x7780
mbedtls error: -0x7780 是在 TLS 握手阶段失败的错误。这个错误码对应的十进制是 -30592,在 mbedTLS 中通常表示:
MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE
即:服务器返回了一个 致命的 TLS Alert,导致握手中断。
为了得到更准确的信息,我们需要程序提供更多的细节。在前一篇博客,我介绍了如何打开程序的Mbedtls日志,所以就设置程序的日志级别为4,得到更详细的日志。完整的日志信息太长,这里仅列出关键信息。
日志明确提到:
../../../../open_source/mbedtls/mbedtls_v3.1.0/library/ssl_tls.c:3215: The SSL configuration is tls12 only.
这表明客户端(设备)的 SSL/TLS 配置仅支持 TLS 1.2 协议,不支持更高版本(如 TLS 1.3)或更低版本(如 TLS 1.1/1.0)。客户端发送Client Hello消息后,收到服务器返回的致命警报:
../../../../open_source/mbedtls/mbedtls_v3.1.0/library/ssl_msg.c:4853: got an alert message, type: [2:40]
../../../../open_source/mbedtls/mbedtls_v3.1.0/library/ssl_msg.c:4861: is a fatal alert message (msg 40)
根据 TLS 协议规范,警报代码40对应 **handshake_failure**(握手失败),表示服务器无法与客户端协商出兼容的握手参数(如协议版本、密码套件等),因此终止握手。
客户端在Client Hello中提供了 48 种密码套件(如TLS-RSA-WITH-AES-256-GCM-SHA384、TLS-ECDH-RSA-WITH-AES-128-GCM-SHA256等,日志中完整列出了,这里省略),并声明支持 TLS 1.2(max version: [3:3],TLS 1.2 的版本号为0x0303)。
但服务器未返回Server Hello,直接以handshake_failure响应,说明服务器不接受客户端的协议版本或密码套件。
使用nmap查看网站支持的加密套件
要查看网站支持的加密套件,可以使用nmap工具。Nmap(Network Mapper)是一款功能强大的开源网络扫描工具,常被用于网络发现与安全审计等方面。
加密套件扫描常针对运行 HTTPS 等加密服务的 443 端口等,需调用其 ssl-enum-ciphers 脚本实现。基本的命令语法为:
nmap --script ssl-enum-ciphers -p 443 <目标网站域名或 IP 地址>
下面就是扫描华为云的MaaS网站的结果:
test@ERAZE-UHYFLAFVU:~$ nmap --script ssl-enum-ciphers -p 443 maas-cn-southwest-2.modelarts-maas.com
Starting Nmap 7.80 ( https://nmap.org ) at 2025-08-13 21:17 CST
Nmap scan report for maas-cn-southwest-2.modelarts-maas.com (1.95.81.128)
Host is up (0.099s latency).
Other addresses for maas-cn-southwest-2.modelarts-maas.com (not scanned): 1.95.59.212
rDNS record for 1.95.81.128: ecs-1-95-81-128.compute.hwclouds-dns.com
PORT STATE SERVICE
443/tcp open https
| ssl-enum-ciphers:
| TLSv1.2:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 (ecdh_x25519) - A
| compressors:
| NULL
| cipher preference: server
|_ least strength: A
Nmap done: 1 IP address (1 host up) scanned in 5.02 seconds
从扫描结果看,服务器支持的 TLS 1.2 加密套件列表如下:
-
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 -
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 -
TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 -
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 -
TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256
目标服务器(maas-cn-southwest-2.modelarts-maas.com)仅支持临时密钥交换套件(ECDHE/DHE),而拒绝静态密钥交换套件(RSA/ECDH)。临时密钥交换套件(ECDHE/DHE),这类套件支持前向 secrecy(前向保密),即每次会话的密钥独立生成,即使长期密钥泄露也不会影响历史会话,是现代服务器普遍要求的安全特性。而WS63SDK的 Mbedtls 3.1.0 默认启用的加密套件中,没有启用任何 ECDHE 类型的加密套件,日志中列出的都是 RSA 密钥交换或 ECDH 静态密钥交换的套件,这些都不是 ECDHE。因此,客户端和服务器没有共同支持的加密套件,导致握手失败。
类似的,扫描DeepSeek API网站,发现它的配置情况和华为云差不多。
test@ERAZE-UHYFLAFVU:~$ nmap --script ssl-enum-ciphers -p 443 api.deepseek.com
Starting Nmap 7.80 ( https://nmap.org ) at 2025-08-13 21:21 CST
Nmap scan report for api.deepseek.com (116.205.40.113)
Host is up (0.085s latency).
Other addresses for api.deepseek.com (not scanned): 116.205.40.114
rDNS record for 116.205.40.113: ecs-116-205-40-113.compute.hwclouds-dns.com
PORT STATE SERVICE
443/tcp open https
| ssl-enum-ciphers:
| TLSv1.2:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (ecdh_x25519) - A
| compressors:
| NULL
| cipher preference: server
|_ least strength: A
Nmap done: 1 IP address (1 host up) scanned in 2.76 seconds
这些网站为了更高的安全性,所以对加密套的设置就比较高。
而我们看百度的网站设置,它支持的加密套就很多,WS63 SDK的默认配置就可以访问它,毕竟好多软件拿百度的网站来检测网站的连通性,所以它连很多非常老的协议都是支持的。
test@ERAZE-UHYFLAFVU:~$ nmap --script ssl-enum-ciphers -p 443 www.baidu.com
Starting Nmap 7.80 ( https://nmap.org ) at 2025-08-13 21:19 CST
Nmap scan report for www.baidu.com (110.242.69.21)
Host is up (0.12s latency).
Other addresses for www.baidu.com (not scanned): 2408:871a:2100:186c:0:ff:b07e:3fbc 2408:871a:2100:1b23:0:ff:b07a:7ebc 110.242.70.57
PORT STATE SERVICE
443/tcp open https
| ssl-enum-ciphers:
| SSLv3:
| ciphers:
| TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
| compressors:
| NULL
| cipher preference: indeterminate
| cipher preference error: Too few ciphers supported
| warnings:
| Broken cipher RC4 is deprecated by RFC 7465
| Forward Secrecy not supported by any cipher
| TLSv1.0:
| ciphers:
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
| TLS_ECDHE_RSA_WITH_RC4_128_SHA (secp256r1) - C
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
| compressors:
| NULL
| cipher preference: server
| warnings:
| Broken cipher RC4 is deprecated by RFC 7465
| TLSv1.1:
| ciphers:
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
| TLS_ECDHE_RSA_WITH_RC4_128_SHA (secp256r1) - C
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
| compressors:
| NULL
| cipher preference: server
| warnings:
| Broken cipher RC4 is deprecated by RFC 7465
| TLSv1.2:
| ciphers:
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A
| TLS_ECDHE_RSA_WITH_RC4_128_SHA (secp256r1) - C
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
| compressors:
| NULL
| cipher preference: server
| warnings:
| Broken cipher RC4 is deprecated by RFC 7465
|_ least strength: C
Nmap done: 1 IP address (1 host up) scanned in 4.96 seconds
网站访问验证
为了进一步验证这个问题,我找了另外一个OpenAI API兼容的平台:质谱AI,加以验证。
下面是网站的扫描结果:
test@ERAZE-UHYFLAFVU:~$ nmap --script ssl-enum-ciphers -p 443 open.bigmodel.cn
Starting Nmap 7.80 ( https://nmap.org ) at 2025-08-13 21:18 CST
Nmap scan report for open.bigmodel.cn (60.205.172.105)
Host is up (0.0066s latency).
PORT STATE SERVICE
443/tcp open https
| ssl-enum-ciphers:
| TLSv1.0:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| compressors:
| NULL
| cipher preference: server
| warnings:
| 64-bit block cipher 3DES vulnerable to SWEET32 attack
| TLSv1.1:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| compressors:
| NULL
| cipher preference: server
| warnings:
| 64-bit block cipher 3DES vulnerable to SWEET32 attack
| TLSv1.2:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (ecdh_x25519) - A
| TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| compressors:
| NULL
| cipher preference: server
| warnings:
| 64-bit block cipher 3DES vulnerable to SWEET32 attack
|_ least strength: C
Nmap done: 1 IP address (1 host up) scanned in 6.28 seconds
从扫描结果看质谱AI的网站支持的加密套件比较丰富,可以和Mbedtls匹配上。
下面就是采用Mebedtls对质谱AI网站进行访问的结果,成功的连接上了网站,并返回了正确的结果。

结束语
经过了一番分析,终于找到了问题的原因和解决问题的方向。目前默认配置无法访问华为云MassS和DeepSeek网站,这个问题留待后面再分析。
6527

被折叠的 条评论
为什么被折叠?



