有什么方法可以获取 X509 证书的可打印版本的长度(由 X509_print* openssl 函数打印)?

Any way to get length of printable version of a X509 certificate (that is printed by X509_print* openssl function)?

我想获取将由 Openssl@1.1.1(c-g) X509_print 函数打印的文本大小。我需要它来为内存 BIO 分配适当的内存缓冲区并将 BIO 发送到 X509_print 函数。

我知道我可以为此使用足够大的缓冲区,但是有什么方法可以在不像 X509_print* 函数那样显式解析 X509 证书的情况下获得准确的大小?

关于 PEM_write_X509 打印的数据大小,我有同样的问题。

最后:

BIO 结构有一个字段 num_write。它是 BIO 中数据的字节表示长度。但是这个字段通常是隐藏的。但是我们可以通过 .

中的函数 BIO_number_written 获取它

注意:对于 char 字符串,它可能不计算终止字节。

下面是示例代码(需要添加 NULL 和失败检查):

    X509 *x509 = NULL;
    BIO *bio = NULL;
    char *str = NULL;
...
    bio = BIO_new(BIO_s_mem());
    X509_print(bio, x509);
    ptr = malloc(BIO_number_written(bio) + 1);
    ptr[BIO_number_written(bio)] = 0;
    BIO_read(bio, ptr, BIO_number_written(bio));
...