【问题标题】:how to programatically in C hash a X509 certificate in PEM format如何在 C 中以编程方式散列 PEM 格式的 X509 证书
【发布时间】:2013-05-11 05:43:34
【问题描述】:

我已生成DER 格式的X509 证书,该证书存储在名为cert.crt 的文件中。

我希望能够使用sha256 算法对其进行哈希处理。

如何做到这一点?

我已经有一个函数可以让我散列任何数据缓冲区,但我在一个文件中有证书。有没有简单的方法可以做到这一点?

我正在寻找一个 C 实现。

【问题讨论】:

  • 主题说 PEM,但问题文本说 DER。是什么格式?
  • 为什么需要散列证书?证书已经有一个包含哈希的签名。如果您需要证书验证,那么这比“散列证书”要复杂得多。

标签: c hash openssl certificate x509


【解决方案1】:

看看函数fopenfread,它们会帮助你。

【讨论】:

    【解决方案2】:

    也许http://linux.die.net/man/3/pem_read_x509http://linux.die.net/man/3/d2i_x509_fp 可以帮助您。虽然 SSL 手册页很简洁,但说得好听。如果文档失败,请在 openssl 实用程序源代码中查找示例。

    编辑 另请查看其他 SO 答案,例如Extract pem certificate information programmatically using opensslIs a X509 certificate in DER format ASN1 encoded?

    【讨论】:

      【解决方案3】:

      用于计算 PEM 证书文件的指纹哈希:

      FILE *fp = fopen(pem_file_path, "r");
      if (fp)
      {
          X509 *x509 = PEM_read_X509(fp, NULL, NULL, NULL);
          if (x509)
          {
              unsigned char md[EVP_MAX_MD_SIZE];
              
              if (X509_digest(x509, EVP_sha256(), md, NULL) == 1)
              {
                  // ok
              }
              
              X509_free(x509);
          }   
          fclose(fp);
      }
      

      结果应该与命令相同:

      openssl x509 -in my.pem -noout -fingerprint -sha256
      

      要更改哈希算法,只需将EVP_sha256() 更改为EVP_sha512()EVP_sha1() 等...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-22
        • 2017-06-13
        • 1970-01-01
        • 1970-01-01
        • 2011-03-19
        • 2010-09-20
        • 2018-12-23
        • 1970-01-01
        相关资源
        最近更新 更多