2013-04-29 159 views
2

我正在阅读使用openSSL生成的.crt证书。我在C程序中的X509文件中有证书。我想知道我刚刚阅读的整个证书的大小。这怎么可能在那里?是否有一个返回证书大小的特定函数?如何获得整个X509证书的大小

感谢 问候

+2

你的意思是DER格式的证书的大小?还是PEM?或其他? – 2013-04-29 10:15:29

+0

我在存储在计算机上的文件中有证书。我正在阅读它的X509结构。 X509结构被读取为PEM格式:PEM_read_BIO_X509_AUX。我还需要通过网络发送证书。这应该是DER还是PEM格式?哪一个更紧凑?谢谢 – mmm 2013-04-29 10:38:27

+1

DER应该更加紧凑,它的二进制格式,但老实说,除非你发送它们的问题,我怀疑这将是多么重要。 – WhozCraig 2013-04-29 10:45:37

回答

9

对于在网络上发送的证书,我建议使用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 
+0

谢谢:)正如我所说,我正在从PEM文件中读取数据并在我的程序中使用它。你知道吗?如果我想使用DER格式而不是PEM,如果我只能使用从PEM到DER的openssl转换,而不是读取PEM文件,那么读取DER文件和程序将工作?或者我需要更改与阅读证书相关的所有代码,提取公钥,验证日期等?非常感谢你:) – mmm 2013-04-29 11:08:30

+0

@moursika这取决于。真。 'openssl'工具可以进行这些转换。 – 2013-04-29 11:10:40

+0

我认为你在有BIO_free(数据)的最后一行有一个错误,它应该是BIO_free(bio)。我检查过了,我的证书有666个字节。你知道是否有任何方法只用我想要的信息生成非常小的证书?我曾预计会有120bytes的东西,最多可能是150个。谢谢 – mmm 2013-04-29 12:42:17