news 2026/2/17 7:28:12

基于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/2/16 17:01:15

基于SpringBoot + Vue的记账管理系统

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

作者头像 李华
网站建设 2026/2/15 14:58:58

如何用PyWebView与React构建现代化桌面应用:5步终极指南

如何用PyWebView与React构建现代化桌面应用&#xff1a;5步终极指南 【免费下载链接】mdserver-web Simple Linux Panel 项目地址: https://gitcode.com/GitHub_Trending/md/mdserver-web 想要摆脱传统桌面应用开发的繁琐流程&#xff0c;同时享受现代前端技术带来的极致…

作者头像 李华
网站建设 2026/2/16 22:50:50

积木报表终极指南:零代码实现专业级数据可视化

积木报表终极指南&#xff1a;零代码实现专业级数据可视化 【免费下载链接】jimureport 「数据可视化工具&#xff1a;报表、大屏、仪表盘」积木报表是一款类Excel操作风格&#xff0c;在线拖拽设计的报表工具和和数据可视化产品。功能涵盖: 报表设计、大屏设计、打印设计、图形…

作者头像 李华
网站建设 2026/2/3 17:17:16

2025年木质台历供应商评测,云边包装专业靠谱

木质台历作为办公与家居装饰的重要元素&#xff0c;近年来受到越来越多消费者的青睐。随着个性化定制需求的增长&#xff0c;木质台历市场呈现出蓬勃发展的态势。本文将从产品质量、生产能力、客户服务和性价比四个维度&#xff0c;对2025年木质台历行业的主要供应商进行客观评…

作者头像 李华
网站建设 2026/2/9 3:39:58

AlphaFold蛋白质结构预测终极指南:CPU环境下的完整部署方案

AlphaFold蛋白质结构预测终极指南&#xff1a;CPU环境下的完整部署方案 【免费下载链接】alphafold 项目地址: https://gitcode.com/gh_mirrors/alp/alphafold 还在为昂贵的GPU计算资源发愁吗&#xff1f;AlphaFold作为蛋白质结构预测的突破性技术&#xff0c;现在可以…

作者头像 李华
网站建设 2026/2/4 22:07:19

Qwen2.5-VL如何实现三维空间智能感知革命?

Qwen2.5-VL如何实现三维空间智能感知革命&#xff1f; 【免费下载链接】Qwen2.5-VL Qwen2.5-VL is the multimodal large language model series developed by Qwen team, Alibaba Cloud. 项目地址: https://gitcode.com/GitHub_Trending/qw/Qwen2.5-VL 在人工智能飞速发…

作者头像 李华