有什么方法可以获取 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));
...
我想获取将由 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));
...