从PEM_read_X509切换到PEM_read_bio_X509(基于BIO的输入的FILE)

Pav*_*l P 6 openssl

我这样做:

FILE* f_cert = fopen("cert", "rb");
X509* x_cert = NULL;
PEM_read_X509(f_cert, &x_cert, NULL, NULL);
...
Run Code Online (Sandbox Code Playgroud)

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

const char cert_data[] = {....};
const int sert_data_size = 123;
Run Code Online (Sandbox Code Playgroud)

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

von*_*ond 6

这是一个示例代码:

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);
Run Code Online (Sandbox Code Playgroud)

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

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