验证证书的有效性(cryptoapi---转自hs_fish)

来源:互联网 发布:mac 其他卷宗是什么 编辑:程序博客网 时间:2024/05/16 03:40

使用CertGetIssuerCertificateFromStore函数来验证证书的有效性,其函数声明如下:

PCCERT_CONTEXT WINAPI CertGetIssuerCertificateFromStore(  HCERTSTORE hCertStore,      //[in]要查找的证书库  PCCERT_CONTEXT pSubjectContext,  //[in]包含主题的证书内容  PCCERT_CONTEXT pPrevIssuerContext, //[in]包含颁发者证书的内容,第一次查找时为NULL  DWORD* pdwFlags);
pPrevIssuerContext这个参数在第一次寻找颁发者证书时必须为NULL,以后寻找下一个颁发者证书时
将上次返回的PCCERT_CONTEXT传给它(因为同一个颁发者可能有很多个证书),注意这里传过来的
PCCERT_CONTEXT的结构在函数执行完后将被释放.
pdwFlags [in,out]
[in]
为要验证证书内容的标志,主要有以下几个(可以用或连接):
CERT_STORE_REVOCATION_FLAG 验证证书是否在CRL列表中
CERT_STORE_SIGNATURE_FLAG 用颁发者证书的公钥来验证主题证书是否有效
CERT_STORE_TIME_VALIDITY_FLAG 验证主题证书是否在有效期内
[out]
做为返回值返回时,这个标志又多了两个值,如下:
CERT_STORE_NO_CRL_FLAG 没有匹配的CRL,也就是说在CRL列表中没有找到此证书
CERT_STORE_NO_ISSUER_FLAG 在证书库中没有找到颁发者证书







函数执行完后,pdwFlags 将被重新设置,验证成功的标志将被设为0,失败的仍然不变,注意:
当CERT_STORE_REVOCATION_FLAG 被设置,并且在证书库的CRL中也没有找到时,返回的
pdwFlags 中CERT_STORE_NO_CRL_FLAG将被设置而且CERT_STORE_REVOCATION_FLAG继续
保留.当 CERT_STORE_SIGNATURE_FLAG or CERT_STORE_REVOCATION_FLAG 被设置时,若
函数找不到颁发者的证书,在返回时CERT_STORE_NO_ISSUER_FLAG的标志将被设置.
注意:如果证书被验证为无效的,函数仍然返回找到的颁发者证书的CERT_CONTEXT的指针.
如果函数调用出错,返回NULL,这时可以调用GetLastError()查看出错的信息:
CRYPT_E_NOT_FOUND 颁发者证书没找到
CRYPT_E_SELF_SIGNED 主题证书与颁发者证书是一样的(自签名证书)
E_INVALIDARG pdwFlags 参数值无效或是hCertStore指定的句柄与pPrevIssuerContext的不
一致.
原创粉丝点击