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

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

2025-06-10 21:28:47作者:庞队千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() 函数,特别是在使用证书认证(而非预共享密钥)的场景下。这一实践对于防止服务器冒充攻击至关重要。

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