我正在阅读使用 openSSL 生成的 .crt 证书。我的 C 程序中的证书位于 X509 文件中。我想知道我刚刚阅读的整个证书的大小。这怎么可能存在?是否有返回证书大小的特定函数?
谢谢最好的问候
我正在阅读使用 openSSL 生成的 .crt 证书。我的 C 程序中的证书位于 X509 文件中。我想知道我刚刚阅读的整个证书的大小。这怎么可能存在?是否有返回证书大小的特定函数?
谢谢最好的问候
对于通过网络发送证书,我建议使用 DER 格式。原因是 PEM 是 Base64 编码的 DER 加上一些额外的文本(前缀/后缀)。
要估计大小,您实际上需要对证书进行编码(这是 DER):
size_t get_length(X509 *cer)
{
int len;
len = i2d_X509(cer, NULL);
return len > 0 ? len : 0;
}
对于 PEM,它更棘手:
unsigned char *data;
BIO *bio = BIO_new(BIO_s_mem());
PEM_write_bio_X509(bio, cer);
len = BIO_get_mem_data(bio, &data);
// here - data is a pointer to encoded data, len - length of data.
BIO_free(bio); // free _after_ you no longer need data