通过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
- 通过OpenSSL获取X509证书的HASH(指纹)值
- CSP:使用CryptoAPI获取X509证书的HASH(指纹)值
- 获取 X509 证书的 Version 信息 (openssl)
- Openssl编程获取X509证书的DNS
- 通过OpenSSL解码X509证书文件
- 通过OpenSSL解析X509证书基本项
- 获取 X509 证书 serial (openssl)
- openssl 获取x509.pem 证书信息
- OPENSSL X509证书验证
- OPENSSL X509证书验证
- openssl gmssl x509 证书
- Openssl生成导入X509证书
- 创建X509证书,并获取证书密钥的一点研究
- 创建X509证书,并获取证书密钥的一点研究
- 获取Androidstudio的SHA1(证书指纹)
- android studio 获取项目的指纹证书
- 获取apk证书指纹
- Openssl 对x509证书有效性进行验证
- 魅族smartbar 适配
- Ubuntu 14.04下配置Ngin X反向代理连接TOMCAT集群
- hadoop mapreduce任务中,map任务数的确定
- s-window对象的方法和属性资料
- 冒泡排序算法
- 通过OpenSSL获取X509证书的HASH(指纹)值
- 更改本地仓库到git的用户名方法
- rrdcache 和 batch的问题
- 多线程
- C4047、间接级别、间接寻址级别不同
- 如何学习和阅读H264标准--弄清楚编解码的流程和 H.264 的关键技术
- 如何安装和破解Photoshop CS6
- 一种逆天的PHP字符串构造方法.
- 常见的空间(3)