c语言mbedtls之证书校验

1776 篇文章 ¥129.90 ¥299.90
#include "mbedtls_crt.h"


#define MBEDTLS_CRT_CHK(f) do {
      if( ( ret = f 
### 使用MBEDTLS在STM32上进行安全通信 #### 通过STM32CubeMX配置mbedTLS中间件 当使用STM32CubeMX初始化项目时,如果发现Middleware文件夹下已有mbedtls库,则可以直接利用该工具完成基本设置。这通常涉及勾选相应的选项来启用TLS功能,并按照向导提示调整必要的参数。 对于未预置mbedtls库的情形,需从官方网站获取最新版本并将其集成至工程环境中[^4]。 #### 安全通信的关键组件 为了建立基于TLS的安全连接,几个核心要素不可或缺: - **私钥与公钥**:用于身份验证及密钥交换过程中的加密解密操作。 - **根证书**:用来校验远程服务器的身份合法性。 - **随机数生成器**:确保每次会话都有独一无二的秘密密钥被创建出来。 这些资源应当妥善保存于受保护存储区内以防泄露[^1]。 #### 示例代码展示HTTPS客户端请求流程 以下是简化版的C语言程序片段,展示了怎样借助mbedTLS发起一次简单的HTTPS GET请求: ```c #include "mbedtls/net_sockets.h" #include "mbedtls/ssl.h" #include "mbedtls/entropy.h" #include "mbedtls/ctr_drbg.h" // 初始化熵收集器和伪随机数发生器 void init_entropy_and_rng(mbedtls_ctr_drbg_context *ctr_drbg){ int ret; mbedtls_entropy_context entropy; mbedtls_entropy_init(&entropy); if ((ret = mbedtls_ctr_drbg_seed(ctr_drbg, mbedtls_entropy_func, &entropy, (const unsigned char *) "", 0)) != 0) { // 处理错误... } } int main(){ int ret; mbedtls_net_context server_fd; mbedtls_ssl_context ssl; mbedtls_ssl_config conf; mbedtls_x509_crt cacert; /* CA certificate */ mbedtls_ctr_drbg_context ctr_drbg; mbedtls_net_init(&server_fd); mbedtls_ssl_init(&ssl); mbedtls_ssl_config_init(&conf); mbedtls_x509_crt_init(&cacert); mbedtls_ctr_drbg_init(&ctr_drbg); // 加载CA证书 if((ret = mbedtls_x509_crt_parse_file(&cacert,"ca_cert.pem"))!=0){ // 错误处理逻辑... } // 设置SSL/TLS结构体 if((ret=mbedtls_ssl_setup(&ssl,&conf))!=0){ // 错误处理逻辑... } // 连接到目标主机 if((ret=mbedtls_net_connect(&server_fd,"example.com",443,MBEDTLS_NET_PROTO_TCP))!=0){ // 错误处理逻辑... } // 将套接字关联到SSL上下文中 mbedtls_ssl_set_bio(&ssl,mbedtls_net_recv,NULL,&server_fd); // 执行握手协议 while((ret=mbedtls_ssl_handshake(&ssl))<0 && ret!= MBEDTLS_ERR_SSL_WANT_READ && ret!=MBEDTLS_ERR_SSL_WANT_WRITE ); if(ret==0){ printf("Handshake successful\n"); // 发送GET请求 const char *get_request="GET / HTTP/1.0\r\nHost: example.com\r\n\r\n"; mbedtls_ssl_write(&ssl,(unsigned char*)get_request,strlen(get_request)); // 接收响应数据 unsigned char buf[1024]; size_t len=sizeof(buf)-1; memset(buf,'\0',len+1); mbedtls_ssl_read(&ssl,buf,len); printf("%s\n",buf); }else{ // 握手失败后的处理... } cleanup(); } ``` 此段代码实现了完整的TLS客户端行为模式,包括但不限于加载信任链、执行TLS握手以及传输应用层消息等功能[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不是程序员~~~~

感谢各位老板的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值