news 2025/12/27 15:40:24

基于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进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/27 0:05:29

基于SpringBoot + Vue的新能源汽车销售数据分析系统

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 &#x1f49b;博主介绍&#…

作者头像 李华
网站建设 2025/12/24 17:36:11

Pock:MacBook Touch Bar Widget管理器的终极解决方案

Pock&#xff1a;MacBook Touch Bar Widget管理器的终极解决方案 【免费下载链接】pock Widgets manager for MacBook Touch Bar 项目地址: https://gitcode.com/gh_mirrors/po/pock 你是否曾经觉得MacBook的Touch Bar功能单一、使用率低&#xff1f;是不是经常为找不到…

作者头像 李华
网站建设 2025/12/26 2:16:42

为什么Hubot Sans成为数字产品设计的颠覆性选择?

为什么Hubot Sans成为数字产品设计的颠覆性选择&#xff1f; 【免费下载链接】hubot-sans Hubot Sans, a variable font from GitHub 项目地址: https://gitcode.com/gh_mirrors/hu/hubot-sans 在当今追求极致用户体验的数字时代&#xff0c;Hubot Sans变量字体技术为技…

作者头像 李华
网站建设 2025/12/24 0:03:51

基于SpringBoot + Vue的重型机械管理平台

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 &#x1f49b;博主介绍&#…

作者头像 李华
网站建设 2025/12/24 2:09:33

Moveable DOM操作库:5个核心场景解决前端交互难题

Moveable是一个功能强大的JavaScript库&#xff0c;专门解决现代Web开发中的复杂DOM操作需求。它提供Draggable&#xff08;可拖动&#xff09;、Resizable&#xff08;可调整大小&#xff09;、Scalable&#xff08;可缩放&#xff09;、Rotatable&#xff08;可旋转&#xff…

作者头像 李华
网站建设 2025/12/23 15:02:39

ComfyUI与Zapier集成:触发式自动生产业务流

ComfyUI与Zapier集成&#xff1a;触发式自动生产业务流 在企业内容生产节奏日益加快的今天&#xff0c;一个营销团队可能每天需要为上百个商品生成主图&#xff0c;客服部门希望客户提交需求后立刻看到视觉化方案预览——传统依赖人工操作的AI图像生成方式显然无法支撑这种高频…

作者头像 李华