mbedtls安装与入门

mbedtls安装与入门本文讲介绍如何在 Ubuntu Debian Raspbian 主机上正确安装 mbedtls

mbedtls简介

  • SSL/TLS 协议实施。
  • 加密库。
  • X.509 证书处理库。

更多mbedtls教程

mbedtls安装

下面介绍如何在 Ubuntu/Debian/raspbian环境下正确安装mbedtls。

克隆源代码

前往github克隆最新版的mbedtls源代码。获取最新版源代码之前需要在Ubuntu/Debian中正确安装git工具

 git clone https://github.com/ARMmbed/mbedtls.git 

切换分支(可选)

切换到某个release分支,此处选择mbedtls-2.4。

git checkout -b mbedtls-2.4 origin/mbedtls-2.4 

通过git checkout可检出具体分支

  • checkout 切换分支
  • -b mbedtls-2.4 创建本地分支
  • origin/mbedtls-2.4 切换到远程分支mbedtls-2.4

查看分支

通过git branch查看分支,确认已经切换到mbedtls-2.4分支

git branch development * mbedtls-2.4 

安装

mbedtls支持make、cmake等多种安装方式。下面介绍make方式和cmake方式编译源代码,并在目标主机中安装mbedtls动态链接库和头文件。本文推荐使用cmake工具安装mbedtls。

make方式

make SHARED=1 sudo make install 
  • 使用make时默认情况下并不会生成动态链接库
  • SHARED=1 生成动态链接库

cmake方式(推荐)

cmake方式比make方式的步骤要多一些,如果目标主机并没有安装cmake工具,可通过apt-get工具安装cmake。

# 更新软件源 sudo apt-get update # 通过软件源安装cmake sudo apt-get install cmake # 生成makefile文件,启用生成动态链接库选项 cmake -DUSE_SHARED_MBEDTLS_LIBRARY=On . # 以下步骤和make方式相同 make sudo make install 
  • -DUSE_SHARED_MBEDTLS_LIBRARY=On 生成动态链接库
  • 使用cmake时,不要忘记之后cmake指令之后的 . ,该点表示当前目录

修改mbedtls配置

mbedtls也可以通过修改配置文件的方式进行裁剪,mbedtls提供了几个参考模板,具体的config.h文件可参考mbedtls/configs目录,该目录中包括config-ccm-psk-tls1_2.h, config-mini-tls1_1.h等文件。和mbedtls安装方法相似,可通过make方法和cmake方法修改具体配置。

make方法

# 设置MBEDTLS_CONFIG_FILE宏,指向config-ccm-psk-tls1_2.h CFLAGS="-I$PWD/configs -DMBEDTLS_CONFIG_FILE=' 
  
    '" # 重新编译 make 
  

cmake方法

# 删除之前cmake相关中间文件,但是不包括CMakeLists.txt文件 find . -iname '*cmake*' -not -name CMakeLists.txt -exec rm -rf {} + # 指定配置文件为 config-ccm-psk-tls1_2.h,重新编译 CFLAGS="-I$PWD/configs -DMBEDTLS_CONFIG_FILE=' 
  
    '" cmake . 
  

安装总结

  • 默认情况下 动态链接库安装至 /usr/local/lib 包括libmbedtls.so libmbedcrypto.so libmbedx509.so
  • 默认情况下 头文件安装至 /usr/local/include/mbedtls
  • 默认情况下 mbedtls的相关工具将安装只 /usr/local/bin目录下,例如gen_key等

基础示例

示例代码

下面我们通过一个示例来说明如何使用mbedtls。这个示例通过介绍如何使用HMAC算法生成一个消息认证码。hmac-test.c代码如下:

#include 
  
    #include 
   
     #include "mbedtls/md.h" #define mbedtls_printf printf int main(void) { int ret; unsigned char secret[] = "a secret"; unsigned char buffer[] = "some data to hash"; unsigned char digest[32]; mbedtls_md_context_t sha_ctx; mbedtls_md_init(&sha_ctx); memset(digest, 0x00, sizeof(digest)); ret = mbedtls_md_setup(&sha_ctx, mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), 1); if (ret != 0) { mbedtls_printf(" ! mbedtls_md_setup() returned -0x%04x\n", -ret); goto exit; } mbedtls_md_hmac_starts(&sha_ctx, secret, sizeof(secret) - 1); mbedtls_md_hmac_update(&sha_ctx, buffer, sizeof(buffer) - 1); mbedtls_md_hmac_finish(&sha_ctx, digest ); mbedtls_printf("HMAC: "); for (int i = 0; i < sizeof(digest); i++) mbedtls_printf("%02X", digest[i]); mbedtls_printf("\n"); exit: mbedtls_md_free( &sha_ctx ); return ret; } 
    
  
  • hmac算法需要两个参数,一个称为秘钥,此处为secret,另一个称为消息,此处为buffer
  • 消息认证码保留在 digest 数组中
  • 此处hmac算法选择sha256算法作为单向散列函数,所以hmac的计算结果一定为32字节。
  • 在mbedtls中,消息认证码的生成分为三个步骤
    1. mbedtls_md_hmac_starts 设置密钥
    2. mbedtls_md_hmac_update 填充消息,本示例仅填充了一次
    3. mbedtls_md_hmac_finish 生成消息认证码,结果保存至digest中
  • 最后把digest使用HEX格式打印至控制台

cmake

在hmac-test.c同目录中新建一个名为Cmakelists.txt的文件,文件内容如下

cmake_minimum_required(VERSION 2.6) # 定义工程名称 project("hmac-test") # 定义依赖动态链接库 set(libs mbedtls mbedcrypto mbedx509 ) set(targets hmac-test ) add_executable(hmac-test hmac-test.c) target_link_libraries(hmac-test ${libs}) 

验证测试

# 生成makefile文件 cmake . # 执行makefile,生成可执行文件hmac-test make # 运行可执行文件hmac-test ./hmac-test # 控制台输出运行结果 HMAC: 7FD04DF92F636FD450BC841C9418E5825C17F33AD9C87CA45971F7F77E 

更多角度验证

如果不确定mbedtls的运算结果,也可以编写一个node.js脚本,使用相同参数的情况下两者的计算结果应该完全相同。

const crypto = require('crypto'); const hmac = crypto.createHmac('sha256', 'a secret'); hmac.update('some data to hash'); console.log(hmac.digest('hex')); // Prints: // 7fd04df92f636fd450bc841c9418e5825c17f33ad9c87ca45971f7f77e 

总结

  1. 安装mbedtls可使用make方法和cmake方法,两种方式均可正确安装mbedtls
  2. mbedtls提供三个重要动态链接库——libmbedtls.so libmbedcrypto.so libmbedx509.so
  3. 通过cmake方式可更方便的编写mbedtls应用
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204704.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午7:44
下一篇 2026年3月19日 下午7:44


相关推荐

  • Matlab矩阵基本操作(定义,运算)

    一、矩阵的表示在MATLAB中创建矩阵有以下规则:a、矩阵元素必须在”[]”内;b、矩阵的同行元素之间用空格(或”,”)隔开;c、矩阵的行与行之间用”;”(或回车符)隔开;d、矩阵的元素可以是数值、变量、表达式或函数;e、矩阵的尺寸不必预先定义。二,矩阵的创建:1、直接输入法最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入

    2022年4月16日
    454
  • CTFHUB——反射型XSS详解「建议收藏」

    CTFHUB——反射型XSS详解「建议收藏」背景本来看ctfhub上有xss的题目,打算好好学习一波,结果点开一看,只有一道题2333。便现在dvwa上熟悉了一波。所谓反射型是相对于存储型来讲的。如果黑客的xss注入是通过某种方式储存到了数据库中,那就是存储型的,这种xss的特点就是每次访问该页面都会收到xss攻击,因为js语句已经放在数据库里了。而反射型xss则不是这样,每次触发只能手动输入和点击才能触发。我认为xss产生的原因主要是对便签审查不严格造成的。dvwaxss例题下面写一下dvwa中的三种难度的反射型xss。<?

    2022年5月9日
    63
  • MFC进度条编程「建议收藏」

    MFC进度条编程「建议收藏」1.进度条的主要功能进度条控制(ProgressControl)主要用来进行数据读写、文件拷贝和磁盘格式等操作时的工作进度提示情况,如安装程序等,伴随工作进度的进展,进度条的矩形区域从左到右利用当前活动窗口标题条的颜色来不断填充。进度条控制在MFC类库中的封装类为CProgressCtrl,通常仅作为输出类控制,所以其操作主要是设置进度条的范围和当前位置,并不断地更新当前位置。进度条的范

    2022年7月12日
    27
  • Docker部署OpenClaw及常见问题解决(win11)

    Docker部署OpenClaw及常见问题解决(win11)

    2026年3月15日
    2
  • OTA测试方法解析

    OTA测试方法解析目前 标准的 OTA 测试系统是 SISO 单输入 单输出 如主流的 2G 3G 和 WLAN 的 802 11a b g 等设备 其主要的测试指标是 TRP 总辐射功率 和 TIS 总全向灵敏度 现代无线技术如 LTE HSPA WI FI 和 WiMAX 为了提高数据传输速度 都开始采用 MIMO 多输入 多输出 技术 MIMO 技术能提高无线传输的可靠性 提高无线通信系统的频谱效率 是面向未来的关键技术 随着 MIMO 技术的不断发展和应用 需要完整而成熟的评估 MIMO 设备的辐射吞吐量的测试要求和测试方法 MIMO 技术利用

    2026年3月20日
    2
  • ring0获取指定进程的PEB

    ring0获取指定进程的PEBifndefTYPEDE H defineTYPEDE HtypedefPPEB stdcall P PsGetProcess PEPROCESS typedefunsig typedefstruc RTL USER PROCESS PARAMETERS BYTEReserved 16

    2026年3月18日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号