【问题标题】:How to get the size of the entire X509 certificate如何获取整个X509证书的大小
【发布时间】:2013-04-29 10:06:17
【问题描述】:

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

谢谢 最好的问候

【问题讨论】:

  • 您是指DER格式的证书大小吗?还是 PEM?还是其他?
  • 我将证书保存在计算机上的一个文件中。我正在阅读它到 X509 结构。 X509 结构通过 PEM_read_BIO_X509_AUX 读取为 PEM 格式。我还需要通过网络发送证书。这应该采用 DER 还是 PEM 格式?哪个更紧凑?谢谢
  • DER 应该更紧凑,采用二进制格式,但老实说,除非您发送大量它们,否则我怀疑它会很重要。
  • 好的,谢谢。但是你知道我如何在 C 中以编程方式知道证书的确切大小,即 PEM 格式的 X509 吗?
  • 转成PEM格式计算一下,这里有什么问题?

标签: c openssl certificate x509


【解决方案1】:

对于通过网络发送证书,我推荐使用 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 文件并且程序可以工作?或者我需要更改与读取证书相关的所有代码、提取公钥、验证日期等?非常感谢:)
  • @moursika 这取决于。真的。 openssl 工具可以进行这些转换。
  • 我认为你有 BIO_free(data) 的最后一行有一个错误,它应该是 BIO_free(bio)。我已经检查过了,我的证书有 666 字节。您知道是否有任何方法可以仅使用我想要的信息生成非常小的证书?我期望最多有 120 字节或 150 字节。谢谢
  • @moursika 你是对的。固定的。如果您在证书字符串中使用短字符串,它会很小。 PEM 不能太小。
  • 在BIO_get_mem_data(bio, &data)函数中,数据缓冲区有证书的数据吗?我的意思是,如果数据是包含证书的缓冲区?谢谢
猜你喜欢
  • 2015-08-22
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
  • 2011-04-06
相关资源
最近更新 更多