news 2026/4/30 4:19:54

基于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/30 4:18:59

ProxyPool多环境实战:从开发到生产的高效部署指南

ProxyPool是一个高效的代理池系统&#xff0c;包含采集模块、验证模块和服务模块三大核心组件&#xff0c;能够自动获取、验证和管理代理资源。在实际应用中&#xff0c;不同环境下的配置差异直接影响系统的性能和稳定性&#xff0c;合理配置多环境参数是确保代理池高效运行的关…

作者头像 李华
网站建设 2026/4/26 23:47:08

JetBot AI机器人终极指南:基于NVIDIA Jetson Nano的快速上手教程

JetBot AI机器人终极指南&#xff1a;基于NVIDIA Jetson Nano的快速上手教程 【免费下载链接】jetbot An educational AI robot based on NVIDIA Jetson Nano. 项目地址: https://gitcode.com/gh_mirrors/je/jetbot JetBot是一个基于NVIDIA Jetson Nano的开源AI机器人项…

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

Bowser版本比较算法终极指南:从设计哲学到工程实践

Bowser版本比较算法终极指南&#xff1a;从设计哲学到工程实践 【免费下载链接】fastapi-tips FastAPI Tips by The FastAPI Expert! 项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi-tips 浏览器检测是现代Web开发中不可或缺的技术环节&#xff0c;而版本比…

作者头像 李华
网站建设 2026/4/20 11:38:06

VoxCPM语音合成实战指南:从技术原理到行业解决方案

当我们审视当前语音技术生态时&#xff0c;一个不容忽视的现状是&#xff1a;传统语音合成系统正面临"情感表达缺失"与"个性化定制困难"的双重挑战。在这个背景下&#xff0c;VoxCPM-0.5B的出现并非简单的技术迭代&#xff0c;而是对整个语音交互行业的一次…

作者头像 李华
网站建设 2026/4/16 12:01:55

9、SUSE Linux Enterprise Server 10 用户访问与安全管理指南(上)

SUSE Linux Enterprise Server 10 用户访问与安全管理指南(上) 在 SUSE Linux Enterprise Server 10 系统中,保障用户访问的安全性至关重要。本文将详细介绍 PAM 模块的使用、用户环境的管理与安全设置等内容。 1. PAM 模块概述 PAM(Pluggable Authentication Modules)…

作者头像 李华
网站建设 2026/4/19 4:13:33

C#动态数组ArrayList和List技巧全解析

// ArrayList:动态数组一个不固定长度的数组集合&#xff0c;并且可以存储不同类型的元素&#xff0c;例如一个arrayList对象可以存储整型、字符串、对象、数组等&#xff0c; //但是int[]这种数组一旦创建好之后 不能后续添加元素&#xff0c;也就是长度是固定&#xff0c;并且…

作者头像 李华