feat(mbedtls): new config to allow weak cert verification

This commit is contained in:
Ashish Sharma
2025-03-28 15:46:48 +08:00
committed by Aditya Patwardhan
parent ea79647066
commit 905f73a4ab
4 changed files with 23 additions and 125 deletions

View File

@@ -1084,4 +1084,11 @@ menu "mbedTLS"
the flash footprint and hence care must be taken to keep some reserved space
for the application binary in flash layout.
config MBEDTLS_ALLOW_WEAK_CERTIFICATE_VERIFICATION
bool "Allow weak certificate verification"
default n
help
This options allows weak certificate verification by skipping the hostname verification.
It is not recommended to use this option.
endmenu # mbedTLS

View File

@@ -2073,6 +2073,21 @@
*/
#define MBEDTLS_ERROR_C
/**
* \def MBEDTLS_SSL_CLI_ALLOW_WEAK_CERTIFICATE_VERIFICATION_WITHOUT_HOSTNAME
*
* Caller: library/ssl_tls.c
*
* Allow weak certificate verification without a hostname.
* This option is not recommended for production use.
*/
#if CONFIG_MBEDTLS_ALLOW_WEAK_CERTIFICATE_VERIFICATION
#define MBEDTLS_SSL_CLI_ALLOW_WEAK_CERTIFICATE_VERIFICATION_WITHOUT_HOSTNAME
#else
#undef MBEDTLS_SSL_CLI_ALLOW_WEAK_CERTIFICATE_VERIFICATION_WITHOUT_HOSTNAME
#endif
/**
* \def MBEDTLS_GCM_C
*

View File

@@ -95,6 +95,3 @@ Reducing Binary Size
Under ``Component Config -> mbedTLS``, there are multiple Mbed TLS features which are enabled by default but can be disabled if not needed to save code size. More information can be about this can be found in :ref:`Minimizing Binary Size <minimizing_binary_mbedtls>` docs.
.. _`API Reference`: https://mbed-tls.readthedocs.io/projects/api/en/v3.6.3/
.. _`Knowledge Base`: https://mbed-tls.readthedocs.io/en/latest/kb/

View File

@@ -1,122 +1 @@
Mbed TLS
========
:link_to_translation:`en:[English]`
`Mbed TLS <https://github.com/Mbed-TLS/mbedtls>`_ 是一个 C 代码库用于实现加密基元、X.509 证书操作以及 SSL/TLS 和 DTLS 协议。该库代码占用空间小,适合嵌入式系统使用。
.. note::
ESP-IDF 使用的 Mbed TLS `复刻仓库 <https://github.com/espressif/mbedtls>`_ 中包含对原生 Mbed TLS 的补丁。这些补丁与某些模块的硬件例程有关,如 ``bignum (MPI)````ECC``
Mbed TLS 通过提供以下内容支持 TLS 1.2、TLS 1.3 和 DTLS 1.2 通信:
- TCP/IP 通信功能:监听、连接、接收、读/写。
- SSL/TLS 通信功能:初始化、握手、读/写。
- X.509 功能CRT、CRL 和密钥处理
- 随机数生成
- 哈希
- 加密/解密
.. note::
Mbed TLS v3.x.x 系列仅支持 TLS 1.2 和 TLS 1.3 协议。对 SSL 3.0、TLS 1.0/1.1 和 DTLS 1.0 的支持已被删除(弃用)。从 Mbed TLS v3.6.0 版本开始完全支持 TLS 1.3,在此版本之前,某些功能仍处于试验状态。有关更多详细信息,请参阅 :component_file:`Mbed TLS ChangeLog <mbedtls/mbedtls/ChangeLog>`
Mbed TLS 文档
------------------
Mbed TLS 文档请参阅以下(上游)指针:
- `API Reference`_
- `Knowledge Base`_
ESP-IDF 的 Mbed TLS 支持
------------------------------
请在 `此处 <https://github.com/espressif/mbedtls/wiki#mbed-tls-support-in-esp-idf>`__ 查找 ESP-IDF 不同分支上的 Mbed TLS 版本信息。
.. note::
参考 :ref:`migration_guide_mbedtls` 从 Mbed TLS 2.x 版本迁移到 3.0 及以上版本。
应用示例
-------------
ESP-IDF 中的示例使用 :doc:`/api-reference/protocols/esp_tls`,为访问常用的 TLS 功能提供了一个简化 API 接口。
参考示例 :example:`protocols/https_server/simple` (简单的 HTTPS 服务器)和 :example:`protocols/https_request` (发出 HTTPS 请求)了解更多信息。
如需直接使用 Mbed TLS API请参考示例 :example:`protocols/https_mbedtls`
其他选项
----------
:doc:`/api-reference/protocols/esp_tls` 是底层 SSL/TLS 库的抽象层,因此可以选择使用 Mbed TLS 或 wolfSSL 作为底层库。默认情况下,仅 Mbed TLS 可在 ESP-IDF 中使用,而 wolfSSL 在 `<https://github.com/espressif/esp-wolfSSL>`_ 公开,还提供了上游子模块指针的相关信息。
如需了解更多相关信息或比较 Mbed TLS 和 wolfSSL请参考文档 :ref:`ESP-TLS: Underlying SSL/TLS Library Options <esp_tls_wolfssl>`
重要配置
-------------
``Component Config -> mbedTLS`` 中的部分重要配置选项如下表所示。点击 :ref:`此处 <CONFIG_MBEDTLS_MEM_ALLOC_MODE>` 获取完整配置选项列表。
.. list::
- :ref:`CONFIG_MBEDTLS_SSL_PROTO_TLS1_2`: 支持 TLS 1.2
- :ref:`CONFIG_MBEDTLS_SSL_PROTO_TLS1_3`: 支持 TLS 1.3
- :ref:`CONFIG_MBEDTLS_CERTIFICATE_BUNDLE`: 支持受信任的根证书包(更多信息请参考 :doc:`/api-reference/protocols/esp_crt_bundle`
- :ref:`CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS`: 支持 TLS 会话恢复:客户端会话票证
- :ref:`CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS`: 支持 TLS 会话恢复:服务会话票证
- :ref:`CONFIG_MBEDTLS_HARDWARE_SHA`: 支持硬件 SHA 加速
:SOC_AES_SUPPORTED: - :ref:`CONFIG_MBEDTLS_HARDWARE_AES`: 支持硬件 AES 加速
:SOC_MPI_SUPPORTED: - :ref:`CONFIG_MBEDTLS_HARDWARE_MPI`: 支持硬件 MPI (bignum) 加速
:SOC_ECC_SUPPORTED: - :ref:`CONFIG_MBEDTLS_HARDWARE_ECC`: 支持硬件 ECC 加速
性能和内存调整
------------------
.. _reducing_ram_usage_mbedtls:
减少内存使用
^^^^^^^^^^^^^^^^^
下表展示了在不同配置下,用 Mbed TLS 作为 SSL/TLS 库运行示例 :example:`protocols/https_request` (启用服务器验证)时,内存的实际使用情况。
.. list-table::
:header-rows: 1
:widths: 25 60 30
:align: center
* - Mbed TLS 测试
- 相关配置
- 堆使用(近似)
* - 默认
- NA
- 42196 B
* - 启用 SSL 动态 buffer 长度
- :ref:`CONFIG_MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH`
- 42120 B
* - 禁用保留对端证书
- :ref:`CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE`
- 38533 B
* - 启用动态 buffer 功能
- :ref:`CONFIG_MBEDTLS_DYNAMIC_BUFFER`
:ref:`CONFIG_MBEDTLS_DYNAMIC_FREE_CONFIG_DATA`
:ref:`CONFIG_MBEDTLS_DYNAMIC_FREE_CA_CERT`
- 22013 B
.. note::
这些值会随着配置选项和 Mbed TLS 版本的变化而变化。
减小固件大小
^^^^^^^^^^^^^^^^^^^^
``Component Config -> mbedTLS`` 中,有多个 Mbed TLS 功能默认为启用状态。如果不需要这些功能,可将其禁用以减小固件大小。要了解更多信息,请参考 :ref:`Minimizing Binary Size <minimizing_binary_mbedtls>` 文档。
.. _`API Reference`: https://mbed-tls.readthedocs.io/projects/api/en/v3.6.3/
.. _`Knowledge Base`: https://mbed-tls.readthedocs.io/en/latest/kb/
.. include:: ../../../en/api-reference/protocols/mbedtls.rst