我正在阅读使用openSSL生成的.crt证书。我在C程序中的X509文件中有证书。我想知道我刚刚阅读的整个证书的大小。这怎么可能在那里?是否有一个返回证书大小的特定函数?如何获得整个X509证书的大小
感谢 问候
我正在阅读使用openSSL生成的.crt证书。我在C程序中的X509文件中有证书。我想知道我刚刚阅读的整个证书的大小。这怎么可能在那里?是否有一个返回证书大小的特定函数?如何获得整个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
谢谢:)正如我所说,我正在从PEM文件中读取数据并在我的程序中使用它。你知道吗?如果我想使用DER格式而不是PEM,如果我只能使用从PEM到DER的openssl转换,而不是读取PEM文件,那么读取DER文件和程序将工作?或者我需要更改与阅读证书相关的所有代码,提取公钥,验证日期等?非常感谢你:) – mmm 2013-04-29 11:08:30
@moursika这取决于。真。 'openssl'工具可以进行这些转换。 – 2013-04-29 11:10:40
我认为你在有BIO_free(数据)的最后一行有一个错误,它应该是BIO_free(bio)。我检查过了,我的证书有666个字节。你知道是否有任何方法只用我想要的信息生成非常小的证书?我曾预计会有120bytes的东西,最多可能是150个。谢谢 – mmm 2013-04-29 12:42:17
你的意思是DER格式的证书的大小?还是PEM?或其他? – 2013-04-29 10:15:29
我在存储在计算机上的文件中有证书。我正在阅读它的X509结构。 X509结构被读取为PEM格式:PEM_read_BIO_X509_AUX。我还需要通过网络发送证书。这应该是DER还是PEM格式?哪一个更紧凑?谢谢 – mmm 2013-04-29 10:38:27
DER应该更加紧凑,它的二进制格式,但老实说,除非你发送它们的问题,我怀疑这将是多么重要。 – WhozCraig 2013-04-29 10:45:37