Openssl 从PEM_read_X509切换到PEM_read_bio_X509(基于文件到基于生物的输入)

Openssl 从PEM_read_X509切换到PEM_read_bio_X509(基于文件到基于生物的输入),openssl,Openssl,我这样做: 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。 如果我已经有了这些变量: const char cert_data[] = {....}; const int sert_data_size = 123; 如何

我这样做:

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。 如果我已经有了这些变量:

const char cert_data[] = {....};
const int sert_data_size = 123;
如何初始化BIO,将其传递给PEM_read_BIO_X509并释放临时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之前,提供的内存区域必须保持不变

请参阅以供参考