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

时间:2014-01-08 02:21:15

标签: 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;

如何启动BIO,将其传递给PEM_read_bio_X509并释放临时生物?

1 个答案:

答案 0 :(得分:5)

以下是示例代码:

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之前,所提供的内存区域必须保持不变。

请参阅OpenSSL documentation on the memory BIO以供参考。