从PEM_read_X509切换到PEM_read_bio_X509(基于文件的输入到基于BIO的输入) [英] Switching from PEM_read_X509 to PEM_read_bio_X509 (FILE based to BIO based input)
本文介绍了从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屋!
查看全文