首页
/ Mbed TLS 2.28.10 版本发布:安全加固与功能优化

Mbed TLS 2.28.10 版本发布:安全加固与功能优化

2025-06-10 18:01:43作者:庞队千Virginia

Mbed TLS 是一个开源的、易于使用的 SSL/TLS 实现库,专为嵌入式系统设计。它提供了加密、SSL/TLS 协议实现以及 X.509 证书处理等功能,广泛应用于物联网设备、网络通信等场景。作为 ARM 公司维护的项目,Mbed TLS 以其轻量级和模块化设计著称,特别适合资源受限的环境。

版本概述

Mbed TLS 2.28.10 是该 2.28 长期支持(LTS)分支的最终版本,此后将不再提供错误修复或安全更新。建议所有用户尽快升级到受支持的版本。本次更新主要包含安全修复和功能增强,特别是针对 TLS 握手过程中的潜在安全问题进行了加固。

重要安全更新

TLS 客户端主机名验证强化

在 TLS 客户端中,如果未调用 mbedtls_ssl_set_hostname() 函数,且尝试进行基于证书的服务器身份验证时,mbedtls_ssl_handshake() 现在会失败并返回 MBEDTLS_ERR_SSL_CERTIFICATE_VERIFICATION_WITHOUT_HOSTNAME 错误。这一变更源于安全考虑:在不知道预期主机名的情况下验证服务器通常是不安全的。

开发者可以通过两种方式恢复旧行为:

  1. 调用 mbedtls_ssl_set_hostname() 并将主机名参数设为 NULL
  2. 启用新的编译时选项 MBEDTLS_SSL_CLI_ALLOW_WEAK_CERTIFICATE_VERIFICATION_WITHOUT_HOSTNAME

需要注意的是,ssl->hostname 在调用 mbedtls_ssl_set_hostname(ssl, NULL) 后的内容已发生变化,具体细节请参考 mbedtls_ssl_context 结构类型中 hostname 字段的文档说明。

TLS 1.2 握手问题修复

修复了 TLS 1.2 握手过程中的一个重要问题。当计算 Finished 消息时,如果内存分配失败或出现加密硬件故障,可能导致计算错误,从而影响 TLS 握手的安全保证。此问题编号为 CVE-2025-27810。

其他安全改进

  • 清零 PSA 操作中使用的临时堆缓冲区
  • 修复了 psa_key_derivation_input_integer() 在操作中止后未检测错误状态的问题

功能优化与错误修复

网络连接处理改进

在网络组件中,使用 mbedtls_net_close 替代了原始的 close 函数,应用于 mbedtls_net_bindmbedtls_net_connect 中,防止可能的文件描述符双重关闭问题。

平台兼容性增强

  • 修复了在 MS-DOS DJGPP 环境下的编译问题
  • 修正了 AES-NI 内联汇编的约束条件,该问题可能在某些 GCC 类编译器为通用 x86_64 目标构建 AES 时导致代码错误
  • 移除了 Everest Visual Studio 2010 兼容头文件,这些文件可能在不完整实现的情况下遮蔽标准 CRT 头文件

调试输出修复

修正了 MBEDTLS_PRINTF_SIZET 的定义,解决了在启用 SSL 调试功能时,使用 Visual Studio 2013 或 MinGW 构建的 Mbed TLS 副本可能出现的运行时崩溃问题。

升级建议

所有用户都应考虑在适当的开发周期内升级到此版本,以利用其中的安全修复和功能改进。特别需要注意的是,2.28 LTS 分支将不再接收更新,长期使用的项目应规划迁移到受支持的版本。

对于 TLS 客户端实现,开发者应确保正确调用 mbedtls_ssl_set_hostname() 函数,特别是在使用证书认证(而非预共享密钥)的场景下。这一实践对于防止服务器冒充攻击至关重要。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
27
11
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
466
3.47 K
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
10
1
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
65
19
flutter_flutterflutter_flutter
暂无简介
Dart
715
172
giteagitea
喝着茶写代码!最易用的自托管一站式代码托管平台,包含Git托管,代码审查,团队协作,软件包和CI/CD。
Go
23
0
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
203
81
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.26 K
695
rainbondrainbond
无需学习 Kubernetes 的容器平台,在 Kubernetes 上构建、部署、组装和管理应用,无需 K8s 专业知识,全流程图形化管理
Go
15
1
apintoapinto
基于golang开发的网关。具有各种插件,可以自行扩展,即插即用。此外,它可以快速帮助企业管理API服务,提高API服务的稳定性和安全性。
Go
22
1