首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用openssl转换代码以使用mbedtls

OpenSSL和mbed TLS(前身为 PolarSSL)都是流行的开源库,用于实现 SSL/TLS 协议以及其他加密算法。如果你需要将使用 OpenSSL 的代码转换为使用 mbed TLS,以下是一些基础概念和相关步骤:

基础概念

SSL/TLS:安全套接层(Secure Sockets Layer)和安全传输层协议(Transport Layer Security)是用于在互联网上提供加密通信的协议。

OpenSSL:一个开源的软件库包,实现了 SSL 和 TLS 协议,并包含了各种加密算法。

mbed TLS:一个轻量级的、易于嵌入的 TLS 库,专为嵌入式系统和物联网设备设计。

转换步骤

  1. 理解代码中的 OpenSSL 功能
    • 确定代码中使用了哪些 OpenSSL 函数和数据结构。
    • 例如,证书加载、密钥管理、SSL 上下文创建等。
  • 查找 mbed TLS 中的对应功能
    • 对于每个 OpenSSL 函数,查找 mbed TLS 中的等效函数。
    • 注意 mbed TLS 的 API 可能与 OpenSSL 有所不同。
  • 修改代码以使用 mbed TLS
    • 替换函数调用和数据结构。
    • 调整参数和返回值以匹配 mbed TLS 的要求。
  • 测试转换后的代码
    • 确保所有功能正常工作。
    • 进行彻底的测试,包括单元测试和集成测试。

示例代码

假设我们有一个简单的 OpenSSL 客户端示例:

代码语言:txt
复制
#include <openssl/ssl.h>
#include <openssl/err.h>

void init_openssl() {
    SSL_library_init();
    SSL_load_error_strings();
    OpenSSL_add_all_algorithms();
}

SSL_CTX* create_context() {
    const SSL_METHOD* method;
    SSL_CTX* ctx;

    method = TLSv1_2_client_method();
    ctx = SSL_CTX_new(method);
    if (!ctx) {
        perror("Unable to create SSL context");
        ERR_print_errors_fp(stderr);
        exit(EXIT_FAILURE);
    }

    return ctx;
}

void configure_context(SSL_CTX* ctx) {
    SSL_CTX_set_ecdh_auto(ctx, 1);

    // Set the key and certificate
    if (SSL_CTX_use_certificate_file(ctx, "cert.pem", SSL_FILETYPE_PEM) <= 0) {
        ERR_print_errors_fp(stderr);
        exit(EXIT_FAILURE);
    }

    if (SSL_CTX_use_PrivateKey_file(ctx, "key.pem", SSL_FILETYPE_PEM) <= 0) {
        ERR_print_errors_fp(stderr);
        exit(EXIT_FAILURE);
    }
}

转换为 mbed TLS 后的代码可能如下:

代码语言:txt
复制
#include "mbedtls/config.h"
#include "mbedtls/ssl.h"
#include "mbedtls/entropy.h"
#include "mbedtls/ctr_drbg.h"
#include "mbedtls/error.h"

void init_mbedtls() {
    mbedtls_entropy_init(&entropy);
    mbedtls_ctr_drbg_init(&ctr_drbg);
}

mbedtls_ssl_context* create_context() {
    mbedtls_ssl_context ssl;
    mbedtls_ssl_init(&ssl);

    mbedtls_ssl_config conf;
    mbedtls_ssl_config_init(&conf);

    mbedtls_ssl_setup(&ssl, &conf);
    return &ssl;
}

void configure_context(mbedtls_ssl_context* ssl) {
    mbedtls_ssl_conf_rng(&conf, mbedtls_ctr_drbg_random, &ctr_drbg);

    // Load the certificate and key
    mbedtls_x509_crt cert;
    mbedtls_pk_context key;

    mbedtls_x509_crt_init(&cert);
    mbedtls_pk_init(&key);

    mbedtls_x509_crt_parse(&cert, (const unsigned char*) cert_pem, strlen(cert_pem));
    mbedtls_pk_parse_key(&key, (const unsigned char*) key_pem, strlen(key_pem), NULL, 0);

    mbedtls_ssl_conf_own_cert(&conf, &cert, &key);
}

应用场景

  • 嵌入式系统:mbed TLS 设计轻量,适合资源受限的环境。
  • 物联网设备:需要安全通信但硬件资源有限。
  • 移动应用:在移动平台上实现安全的 HTTPS 连接。

可能遇到的问题及解决方法

  1. API 不兼容
    • 问题:某些 OpenSSL 功能在 mbed TLS 中不存在或实现方式不同。
    • 解决方法:查找替代方案或自定义实现。
  • 性能差异
    • 问题:转换后性能可能有所不同。
    • 解决方法:进行性能测试和优化。
  • 错误处理
    • 问题:错误码和处理方式不同。
    • 解决方法:仔细检查错误处理逻辑,确保正确处理所有可能的错误情况。

通过以上步骤和示例代码,你应该能够成功地将 OpenSSL 代码转换为使用 mbed TLS。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • openssl安装与使用

    使用协议库,你完全可以建立一个SSL服务器和SSL客户端。应用程序是基于密码算法库和SSL协议库实现的命令,熟悉OpenSSL可以从使用这些应用程序开始。   ...PEM output with cbc camellia 以上几个都是对称加密算法的指定,生成私钥的时候一般会用到 -text print the key in text 以明文形式输出各个参数值...使用私钥做签名 -verify 使用公钥认证签名 -encrypt 使用公钥加密 -decrypt 使用私钥解密 -hexdump 以16进制打印...设置了此选项后,位置转换过来:输入一个传统格式的私钥文件,输出一个PKCS#8格式的文件。 -noiter :MAC保护计算次数为1。...这个选项一直不加密私钥文件,在绝对必要的时候才能够使用。某些软件例如一些JAVA代码签名软件使用不加密的私钥文件。 -nooct :这个选项产生的RSA私钥文件是一个坏的格式,一些软件将会使用。

    4.4K20

    openssl的部分使用例子

    当前只有三个OpenSSL命令会使用这个配置文件:ca, req, x509。有望未来版本会有更多命令使用配置文件。...OpenSSL 0.9.7还新增了AES的支持。很多对称密码支持不同的模式,包括CBC, CFB, ECB以 及OFB。对于每一种密码,默认的模式总是CBC。...OpenSSL 0.9.5 提供了dhparam命令用来生成参数集,但是生成公钥匙和私钥匙的命令dh和gendh已不推荐使用。未来版本可能会加上这个功能。...中读取Diffie-Hell参数,以C代码的形式 # 输出到stdout $ openssl dhparam -in dhparam.pem -noout -C 4.2 数字签名算法(Digital...如果没有设置,则HOME目录下的.rnd文件将会使用。 OpenSSL还提供了一个命令rand用来指定重置来源文件。来源文件之间以操作系统的文件分割字符隔开。

    32310

    使用openssl创建https证书

    如果你已经看了前面两篇文章,或者大致了解https,那么我们正式开始今天的主题,如何用openssl这个玩意生成证书呢? 先上一张图,这张图就是用openssl生成证书的整个流程了,如何看这个图呢?...openssl req -new -key server.key -out server.csr ?...3、生成CA机构的私钥,命令和生成服务器私钥一样,只不过这是CA的私钥 openssl genrsa -out ca.key 1024 4、生成CA机构自己的证书申请文件 openssl req -new...https证书厂商生成https证书的过程,其中涉及到了根证书等等一些概念,如果你不是太明白也没有关系,我们还有B方案,我只想要证书,不想搞得太深,那么请使用如下方法,简便快捷。...只需要三步: 第一步,生成服务器私钥: openssl genrsa -out server.key 1024 第二步,根据私钥和输入的信息生成证书请求文件: openssl req -new -key

    31.5K82

    Apache OpenSSL生成证书使用

    如果信息完全和已有证书信息相同会报错,即不能生成相同的证书,报错信息为: failed to update database TXT_DB error number 2 X.509:证书格式,一般以....使用OpenSSL生成CA私钥,即CA.key 在D:\Apache\Apache\bin 目录下执行:openssl genrsa -out ca.key 1024 得到CA.key(1024位) 2...⑦客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。...⑧服务器向客户端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。...⑨SSL的握手部分结束,SSL安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。

    1.5K30

    使用openssl演练数字签名

    以下代码摘自网上,设置一个server和client,client代码如下: package main import ( "fmt" "io/ioutil" "net/http"..." -days 5000 -out ca.crt #使用CA私钥生成CA公钥 openssl genrsa -out server.key 2048 #生成server端私钥 openssl req.../cn必须是服务端的域名,使用IP可能会报如下错误,可以使用修改/etc/hosts的方式做域名映射 如谷歌的subj内容为: server执行如下: client执行如下: 可以使用如下方式验证证书有效性...\privkey -accept 18444 使用上面的命令开启一个ssl测试服务器 2.openssl s_client -msg -verify -tls1_2 -state -showcerts...该证书中包含了server的公钥,用来后续与client端tls协商使用 以上信息也可以在windows的证书中查看: 本次生成的密钥和代码参见:https://files.cnblogs.com/

    49920

    使用openssl实现RSA非对称加密

    简单定义:公钥和私钥,加密和解密使用的是两个不同的密钥,所以是非对称 系统:ubuntu 14.04 软件:openssl java php 生成公钥私钥 使用命令生成私钥: openssl genrsa...rsa_private_key.pem 文件名 -pubout 输出 -out 到文件 rsa_public_key.pem 文件名 shell加解密 新建一个readme.txt 内容是taoshihan 使用公钥加密...readme.txt 文件名 -inkey 输入的密钥 rsa_public_key.pem 上一步生成的公钥 -pubin 表名输入是公钥文件 -out输出到文件 hello.en 输出文件名 使用私钥解密...DHrLityTt2/QjjQUFYD5/Aa1m1QKUBulWY4/C5so5dm6wrRnjolsIFUbY+RfH4B6hp1 taQGBRDum/xEX6OsJ9I= 解密后: taoshihan shell使用公钥加密...,php使用私钥解密 shell: openssl rsautl -encrypt -in readme.txt -inkey rsa_public_key.pem -pubin|base64 加密后的字符串

    3.6K10

    理解和适配AEAD加密套件

    openssl的接口实在太晦涩,而mbedtls的接口设计比openssl好太多,所以接口使用了mbedtls的形式。...并且使用openssl 1.1以上的花,还支持chacha20。其中XXTEA是内置提供的加密算法代码,而其他的来自于加密库的cipher模块。...同时这两个API在调用的时候也会检查用户是否使用了正确的接口,防止误用。 这里最重要的是保证数据和流程上标准化,也就是无论是用openssl还是mbedtls又或是其他库加密和解密的结果要一致。...所以就直接写了代码读它的测试数据集了。配合上原来的测试数据,然后CI里的构建矩阵同时开openssl和mbedtls两种模式。这样所有支持的算法就都在测试集中了。...所以导致这里不得不对openssl的名字也做一次名字转换。

    5.4K20

    使用OpenSSL创建CA和申请证书

    OpenSSL简介 OpenSSL是一种加密工具套件,可实现安全套接字层(SSL v2 / v3)和传输层安全性(TLS v1)网络协议以及它们所需的相关加密标准。...openssl命令行工具用于从shell程序使用OpenSSL加密库的各种加密功能。...它可以用于: 创建和管理私钥,公钥和参数 公钥加密操作 创建X.509证书,CSR和CRL 消息摘要的计算 使用密码进行加密和解密 SSL / TLS客户端和服务器测试 处理S / MIME签名或加密的邮件...x509:专用于CA生成自签证书 -key:生成请求时用到的私钥文件 -days n:证书的有效期限 -out /PATH/TO/SOMECERTFILE: 证书的保存路径 3.颁发证书 3.1在需要使用证书的主机生成证书请求...certificate request A challenge password []: An optional company name []: 3.2将证书申请文件传输给CA(两台不同的主机可以使用

    2.7K30

    java下使用openssl生成公私钥

    公私钥准备 使用openssl生成私钥 openssl genrsa -out rsa_private.key 1024 这里使用1024使用通用场景,需要加强的话使用2048 使用openssl生成公钥...Java具有私钥的编码密钥规范:PKCS8EncodedKeySpec - 但是,它实现了“PKCS#8”而不是我们使用的“PKCS#1”。...幸运的是,OpenSSL还包含一个这种格式的转换器: openssl pkcs8 -topk8 -in rsa_private.key -out pkcs8_rsa_private.key -nocrypt...转换后格式如下 -----BEGIN PRIVATE KEY----- MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMyc/nlMmA/aDqYd...-----END PRIVATE KEY----- 这里就大概得出结论是: java要读取openssl文件需要去掉页眉页脚来der且全换成经过base64反编译得真实编码值 代码片段 详细代码查看后面源码文件

    2.6K10

    openssl生成证书linux,Linux下使用openssl生成证书「建议收藏」

    利用OpenSSL生成库和命令程序,在生成的命令程序中包括对加/解密算法的测试,openssl程序,ca程序.利用openssl,ca可生成用于C/S模式的证书文件以及CA文件....(参数des3是加密算法,也可以选用其他安全的算法),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果不要口令,则可用以下命令去除口令: openssl rsa -in server.key...-cert ca.crt -keyfile ca.key -config openssl.cnf 必须保证openssl.cnf在当前目录下,这个文件可以在apps目录中找到..../serial linux下使用openssl生成https的crt和key证书 x509证书一般会用到三类文,key,csr,crt Key 是私用密钥openssl格,通常是rsa算法....Csr 是证书请求文件,用于申请证书.在制作csr文件的时,必须使用自己的私钥来签署申,还 … Widows下利用OpenSSL生成证书 1.下载OpenSSL的windows版本 32位:openssl

    6.6K10
    领券