通过OpenSSL获取X509证书的HASH(指纹)值

来源:互联网 发布:mac裸色唇膏试色 编辑:程序博客网 时间:2024/06/05 23:00

请关注之前的系列文章:
通过OpenSSL解码X509证书文件
通过OpenSSL解析X509证书基本项

        通过之前的文章,我们可以使用OpenSSL库解码X509证书文件,并且解析证书的基本项,这次我们尝试通过OpenSSL获取证书的HASH值。证书的HASH值,也称指纹值,是检查证书的完整性、正确性的属性。如果使用父证书来验证证书的签名时,就会使用到HASH值。

        通过Windows查看证书的方式看到的证书HASH(指纹)值如下:


        有了前面系列文章的基础,我们假设已经通过OpenSSL解码证书文件,并且得到了X509证书对象指针:X509*m_pX509;

其实,证书的HASH值就存放在结构体X509的成员变量sha1_hash中,X509定义如下:

struct x509_st{X509_CINF *cert_info;X509_ALGOR *sig_alg;ASN1_BIT_STRING *signature;int valid;int references;char *name;CRYPTO_EX_DATA ex_data;/* These contain copies of various extension values */long ex_pathlen;long ex_pcpathlen;unsigned long ex_flags;unsigned long ex_kusage;unsigned long ex_xkusage;unsigned long ex_nscert;ASN1_OCTET_STRING *skid;AUTHORITY_KEYID *akid;X509_POLICY_CACHE *policy_cache;STACK_OF(DIST_POINT) *crldp;STACK_OF(GENERAL_NAME) *altname;NAME_CONSTRAINTS *nc;#ifndef OPENSSL_NO_RFC3779STACK_OF(IPAddressFamily) *rfc3779_addr;struct ASIdentifiers_st *rfc3779_asid;#endif#ifndef OPENSSL_NO_SHAunsigned char sha1_hash[SHA_DIGEST_LENGTH];#endifX509_CERT_AUX *aux;} /* X509 */;

      只要返回成员sha1_hash的内容,就能得到证书的HASH值。完整的函数代码如下:

ULONG COpenSSLCertificate::get_HashValue(LPBYTE lpbtHash, ULONG *pulHashLen){ULONG ulRes = 0;if (!m_pX509){return CERT_ERR_INVILIDCALL;}if (!pulHashLen){return CERT_ERR_INVALIDPARAM;}if (!lpbtHash){*pulHashLen = 20;return CERT_ERR_OK;}memcpy_s(lpbtHash, *pulHashLen , m_pX509->sha1_hash, 20);*pulHashLen = 20;return CERT_ERR_OK;}

      使用本人的证书解析工具查看证书的HASH值如下图:


(该工具代码工程可以在本人的下载资源中下载,下载连接:X509证书解析工具V1.1)


0 0
原创粉丝点击