我生成了一个格式的X509
证书DER
,它存储在一个名为cert.crt
.
我希望能够用sha256
算法对其进行散列。
如何才能做到这一点 ?
我已经有一个函数可以让我对任何数据缓冲区进行哈希处理,但是我在文件中有证书。是否有捷径可寻 ?
我正在寻找一个 C 实现。
我生成了一个格式的X509
证书DER
,它存储在一个名为cert.crt
.
我希望能够用sha256
算法对其进行散列。
如何才能做到这一点 ?
我已经有一个函数可以让我对任何数据缓冲区进行哈希处理,但是我在文件中有证书。是否有捷径可寻 ?
我正在寻找一个 C 实现。
看看函数fopen
,fread
它们会对你有所帮助。
也许http://linux.die.net/man/3/pem_read_x509或http://linux.die.net/man/3/d2i_x509_fp可以帮助你。虽然 SSL 手册页很简洁,但说得好听。如果文档失败,请在 openssl 实用程序源代码中查找示例。
编辑还请查看其他 SO 答案,例如使用 openssl 以编程方式提取 pem 证书信息,以及X509 证书是否采用 DER 格式 ASN1 编码?
用于计算 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()