繁体   English   中英

有什么方法可以获得 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(cg) X509_print function 打印的文本大小。 我需要这个来为 memory BIO 分配适当的 memory 缓冲区并将 BIO 发送到X509_print function。

我知道我可以为此使用足够大的缓冲区,但是有没有办法获得确切的大小而无需像X509_print * 函数那样显式解析 X509 证书?

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

最后:

BIO 结构有一个字段num_write 它是 BIO 中数据的字节表示长度。 但是,此字段通常是隐藏的。 但是我们可以通过 <openssl/bio.h> 中的 function 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));
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM