从PEM_read_X509切换到PEM_read_bio_X509(基于文件的输入到基于BIO的输入) [英] Switching from PEM_read_X509 to PEM_read_bio_X509 (FILE based to BIO based input)

查看:2978
本文介绍了从PEM_read_X509切换到PEM_read_bio_X509(基于文件的输入到基于BIO的输入)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我这样做:

FILE* f_cert = fopen("cert", "rb");
X509* x_cert = NULL;
PEM_read_X509(f_cert, &x_cert, NULL, NULL);
...

现在,我想自己读取该"cert"文件,并使用PEM_read_bio_X509而不是PEM_read_X509. 所以,如果我已经有了这些变量:

now I want to read that "cert" file myself, and use PEM_read_bio_X509 instead of PEM_read_X509. So, if I already have these variables:

const char cert_data[] = {....};
const int sert_data_size = 123;

我如何初始化BIO,将其传递给PEM_read_bio_X509并释放临时的bio?

how do I init BIO, pass it to PEM_read_bio_X509 and free the temp bio?

推荐答案

以下是示例代码:

const char cert_data[] = {....};
const int cert_data_size = sizeof(cert_data);

BIO *bio = NULL;
X509* x_cert = NULL;

// Create a read-only BIO backed by the supplied memory buffer
bio = BIO_new_mem_buf((void*)cert_data, cert_data_size);

PEM_read_bio_X509(bio, &x_cert, NULL, NULL);
...

// Cleanup
BIO_free(bio);

注意:所提供的数据直接从所提供的缓冲区中读取:不会首先复制,因此所提供的内存区域必须保持不变,直到释放BIO.

Note: the supplied data is read directly from the supplied buffer: it is not copied first, so the supplied area of memory must be unchanged until the BIO is freed.

请参阅内存BIO上的OpenSSL文档以供参考.

这篇关于从PEM_read_X509切换到PEM_read_bio_X509(基于文件的输入到基于BIO的输入)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆