在当今物联网和嵌入式系统快速发展的时代,安全通信变得至关重要。mbed TLS 是一个轻量级、可移植的开源加密库,专为嵌入式设备设计,支持 TLS/SSL 协议、X.509 证书、加密算法等核心安全功能。本文将手把手教你如何在 C 语言项目中集成并使用 mbed TLS,即使你是初学者也能轻松上手。

mbed TLS(原名 PolarSSL)是一个用 C 语言编写的加密库,由 Arm 公司维护。它体积小、模块化强,非常适合资源受限的嵌入式系统。其主要特性包括:
无论你是开发智能手表、工业控制器还是 IoT 节点,mbed TLS 都能为你提供可靠的安全通信能力。
首先,你需要获取 mbed TLS 源码。你可以从 GitHub 官方仓库克隆:
git clone https://github.com/Mbed-TLS/mbedtls.gitcd mbedtlsmake
如果你在 Windows 上开发,也可以使用 CMake 构建项目。构建完成后,你会得到静态库(如 libmbedtls.a、libmbedcrypto.a、libmbedx509.a)。
将这些库文件和头文件(位于 include/ 目录)添加到你的 C 项目中即可开始使用。
我们从最简单的例子开始——使用 mbed TLS 计算一段字符串的 SHA-256 哈希值。这属于 C语言加密库 的基础功能。
#include <stdio.h>#include <string.h>#include "mbedtls/sha256.h"int main(void){ const char *input = "Hello, mbed TLS!"; unsigned char hash[32]; // SHA-256 输出为 32 字节 // 初始化并计算哈希 mbedtls_sha256((const unsigned char *)input, strlen(input), hash, 0); // 打印结果(十六进制) printf("SHA-256: "); for (int i = 0; i < 32; i++) { printf("%02x", hash[i]); } printf("\n"); return 0;}编译时记得链接 mbedcrypto 库:
gcc -I ./mbedtls/include -L ./mbedtls/library -o sha256_example sha256.c -lmbedcrypto
接下来,我们尝试建立一个安全的 HTTPS 连接。这是 嵌入式安全通信 的典型应用场景。
以下代码演示如何使用 mbed TLS 连接到 https://httpbin.org 并发送一个 GET 请求:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include "mbedtls/net_sockets.h"#include "mbedtls/ssl.h"#include "mbedtls/entropy.h"#include "mbedtls/ctr_drbg.h"#include "mbedtls/debug.h"#define SERVER_PORT "443"#define SERVER_NAME "httpbin.org"#define GET_REQUEST "GET /get HTTP/1.1\r\nHost: httpbin.org\r\n\r\n"int main(void){ int ret; mbedtls_net_context server_fd; mbedtls_entropy_context entropy; mbedtls_ctr_drbg_context ctr_drbg; mbedtls_ssl_context ssl; mbedtls_ssl_config conf; mbedtls_x509_crt cacert; // 初始化 mbedtls_net_init(&server_fd); mbedtls_ssl_init(&ssl); mbedtls_ssl_config_init(&conf); mbedtls_x509_crt_init(&cacert); mbedtls_entropy_init(&entropy); mbedtls_ctr_drbg_init(&ctr_drbg); // 设置随机数生成器 if ((ret = mbedtls_ctr_drbg_seed(&ctr_drbg, mbedtls_entropy_func, &entropy, NULL, 0)) != 0) { printf("Failed to seed RNG\n"); goto exit; } // 加载 CA 证书(此处简化,实际应加载可信根证书) // mbedtls_x509_crt_parse(&cacert, (const unsigned char *)ca_bundle, len); // 配置 SSL if ((ret = mbedtls_ssl_config_defaults(&conf, MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_STREAM, MBEDTLS_SSL_PRESET_DEFAULT)) != 0) { printf("Failed to set SSL defaults\n"); goto exit; } mbedtls_ssl_conf_authmode(&conf, MBEDTLS_SSL_VERIFY_NONE); // 不验证证书(仅测试!) mbedtls_ssl_conf_rng(&conf, mbedtls_ctr_drbg_random, &ctr_drbg); // mbedtls_ssl_conf_ca_chain(&conf, &cacert, NULL); // 启用证书验证时使用 if ((ret = mbedtls_ssl_setup(&ssl, &conf)) != 0) { printf("Failed to setup SSL\n"); goto exit; } if ((ret = mbedtls_ssl_set_hostname(&ssl, SERVER_NAME)) != 0) { printf("Failed to set hostname\n"); goto exit; } // 连接服务器 if ((ret = mbedtls_net_connect(&server_fd, SERVER_NAME, SERVER_PORT, MBEDTLS_NET_PROTO_TCP)) != 0) { printf("Failed to connect\n"); goto exit; } mbedtls_ssl_set_bio(&ssl, &server_fd, mbedtls_net_send, mbedtls_net_recv, NULL); // 握手 while ((ret = mbedtls_ssl_handshake(&ssl)) != 0) { if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) { printf("Handshake failed\n"); goto exit; } } // 发送请求 mbedtls_ssl_write(&ssl, (unsigned char *)GET_REQUEST, strlen(GET_REQUEST)); // 接收响应 unsigned char buf[1024]; int len = mbedtls_ssl_read(&ssl, buf, sizeof(buf) - 1); if (len > 0) { buf[len] = '\0'; printf("Response:\n%s\n", buf); }exit: mbedtls_ssl_close_notify(&ssl); mbedtls_net_free(&server_fd); mbedtls_ssl_free(&ssl); mbedtls_ssl_config_free(&conf); mbedtls_x509_crt_free(&cacert); mbedtls_ctr_drbg_free(&ctr_drbg); mbedtls_entropy_free(&entropy); return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE;} ⚠️ 注意:上述代码中关闭了证书验证(MBEDTLS_SSL_VERIFY_NONE),仅用于演示。在生产环境中,务必启用证书验证以防止中间人攻击。使用 mbed TLS使用指南 时,你可能会遇到以下问题:
mbedcrypto、mbedx509 和 mbedtls 三个库。config.h 禁用不需要的功能以减小体积。建议开启调试日志:
mbedtls_debug_set_threshold(3); // 设置日志级别mbedtls_ssl_conf_dbg(&conf, my_debug, stdout); // 注册调试回调函数
通过本教程,你已经掌握了如何在 C 语言项目中使用 mbed TLS 实现基本的加密和安全通信功能。无论是计算哈希、加密数据,还是建立 TLS 连接,mbed TLS 都提供了简洁而强大的 API。作为一款优秀的 C语言加密库,它在 嵌入式安全通信 领域有着广泛应用。希望这篇 mbed TLS教程 能帮助你迈出安全开发的第一步!
如需深入学习,请参考官方文档:https://tls.mbed.org
本文由主机测评网于2025-12-19发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20251210183.html