news 2026/4/23 12:48:00

基于C语言和mbedtls库,实现TLS 加密通信落地

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于C语言和mbedtls库,实现TLS 加密通信落地

以下是基于 C 语言 + mbedtls 实现 TLS 加密通信的完整落地代码,包含服务器端客户端,适配 Linux / 嵌入式 Linux 环境,兼顾可读性和生产级安全规范。

一、环境准备

  1. 安装 mbedtls:参考前文编译部署步骤,确保头文件路径(/usr/local/mbedtls/include)和库路径(/usr/local/mbedtls/lib)正确。
  2. 生成证书:执行前文的 OpenSSL 命令,生成ca_crt.pem(CA 根证书)、server_crt.pem(服务器证书)、server_key.pem(服务器私钥)、client_crt.pem(客户端证书)、client_key.pem(客户端私钥)

二、核心通用工具函数(tls_common.h)

封装 mbedtls 初始化、释放、收发等通用逻辑,减少代码冗余。

#ifndef TLS_COMMON_H #define TLS_COMMON_H #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <fcntl.h> #include "mbedtls/ssl.h" #include "mbedtls/x509_crt.h" #include "mbedtls/ctr_drbg.h" #include "mbedtls/entropy.h" #include "mbedtls/pk.h" // TLS上下文(每个连接独立) typedef struct { int fd; // TCP套接字 mbedtls_ssl_context ssl; // SSL会话上下文 mbedtls_ssl_config conf; // SSL配置 mbedtls_x509_crt cert; // 本地证书(服务器/客户端) mbedtls_pk_context pkey; // 本地私钥 mbedtls_x509_crt cacert; // CA根证书(用于验证对方) mbedtls_entropy_context entropy; // 熵源 mbedtls_ctr_drbg_context ctr_drbg;// 随机数生成器 } tls_ctx_t; // 错误码打印辅助函数 void mbedtls_perror(const char *func, int ret); // 初始化TLS上下文 // role: MBEDTLS_SSL_IS_SERVER / MBEDTLS_SSL_IS_CLIENT // cert_path: 本地证书路径(NULL则不加载) // key_path: 本地私钥路径(NULL则不加载) // ca_path: CA根证书路径(用于验证对方证书) int tls_ctx_init(tls_ctx_t *ctx, int role, const char *cert_path, const char *key_path, const char *ca_path); // TLS握手(阻塞模式) int tls_handshake(tls_ctx_t *ctx); // 加密发送数据(替代send) ssize_t tls_send(tls_ctx_t *ctx, const void *buf, size_t len); // 加密接收数据(替代recv) ssize_t tls_recv(tls_ctx_t *ctx, void *buf, size_t len); // 释放TLS上下文 void tls_ctx_free(tls_ctx_t *ctx); // 创建TCP套接字(通用) int tcp_socket_create(const char *ip, int port, int is_server); #endif // TLS_COMMON_H

三、通用工具函数实现(tls_common.c)

#include "tls_common.h" void mbedtls_perror(const char *func, int ret) { char buf[1024] = {0}; mbedtls_strerror(ret, buf, sizeof(buf)); fprintf(stderr, "[ERROR] %s: %d - %s\n", func, ret, buf); } int tls_ctx_init(tls_ctx_t *ctx, int role, const char *cert_path, const char *key_path, const char *ca_path) { int ret; const char *pers = "tls_comm"; // 随机数种子标识 // 初始化所有上下文 memset(ctx, 0, sizeof(tls_ctx_t)); mbedtls_ssl_init(&ctx->ssl); mbedtls_ssl_config_init(&ctx->conf); mbedtls_x509_crt_init(&ctx->cert); mbedtls_pk_init(&ctx->pkey);
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 9:53:01

TLS 加密通信落地实操:为 TCP 服务器集成 mbedtls 的 7 步安全加固法

TLS 加密通信落地实操:为 TCP 服务器集成 mbedtls 的 7 步安全加固法 mbedtls(前身 PolarSSL)是轻量级加密库,适配嵌入式 / 服务器端 TCP 通信场景,以下 7 步流程从环境搭建到安全加固,完整实现 TCP 服务器的 TLS 加密改造,兼顾易用性与安全性。 前提说明 适用场景:L…

作者头像 李华
网站建设 2026/4/23 9:53:23

3DS系统升级指南:从A9LH迁移到B9S的7个关键步骤

3DS系统升级指南&#xff1a;从A9LH迁移到B9S的7个关键步骤 【免费下载链接】Guide_3DS A complete guide to 3DS custom firmware, from stock to boot9strap. 项目地址: https://gitcode.com/gh_mirrors/gu/Guide_3DS 你是否还在使用老旧的arm9loaderhax&#xff08;A…

作者头像 李华
网站建设 2026/4/23 9:52:35

终极NFC读卡器工具:电脑版完整使用指南

终极NFC读卡器工具&#xff1a;电脑版完整使用指南 【免费下载链接】NFC读卡器工具-电脑版 本仓库提供了一个名为“NFC-Reader-Tool-电脑版.zip”的资源文件下载。该文件是一个PM532免费软件&#xff0c;功能强大且易于使用&#xff0c;适合需要进行NFC读卡操作的用户 项目地…

作者头像 李华
网站建设 2026/4/23 11:17:48

Tekla自动标注调图插件:让钢结构详图制作效率翻倍

Tekla自动标注调图插件&#xff1a;让钢结构详图制作效率翻倍 【免费下载链接】Tekla自动标注调图插件 Tekla自动标注调图插件是一款专为Tekla Structures设计的强大工具&#xff0c;旨在提升钢结构详图制作效率。该插件能够自动识别详图中的梁、柱、板等元素&#xff0c;快速完…

作者头像 李华
网站建设 2026/4/23 11:17:09

Livewire终极指南:零JavaScript构建动态Laravel应用

Livewire终极指南&#xff1a;零JavaScript构建动态Laravel应用 【免费下载链接】livewire livewire&#xff1a;这是Laravel Livewire的一个官方示例项目&#xff0c;适合学习如何使用Livewire组件来构建动态网页。特点包括实时更新、易于测试、与Laravel框架集成良好等。 项…

作者头像 李华
网站建设 2026/4/23 11:17:09

轻量级视觉AI部署革命:3大技术突破让Qwen3-VL推理速度翻倍

在AI应用落地的关键阶段&#xff0c;推理效率成为制约发展的瓶颈。新一代智能推理优化器通过创新技术组合&#xff0c;为轻量视觉语言模型带来前所未有的部署体验。无论你是技术开发者还是业务应用者&#xff0c;这套方案都将让你在1-2天内完成从模型下载到业务集成的全流程。 …

作者头像 李华