windowsAPI验证上下级证书关系

来源:互联网 发布:梯形螺纹怎么编程 编辑:程序博客网 时间:2024/06/05 00:49

现象:

调用CertCreateCertificateContext解析Base64格式证书时报“0x8009310b ASN1 遇到了不确的标记值

分析:

windows不支持Base64编码只支持Der编码

解决方案:

Base64证书先解码,然后使用

 

//使用根证书对用户证书进行验证,确认是自己颁发的extern "C" int __stdcall VerifyUserCert(char* CspName,byte* UserCertInfo/*DER编码*/,int nUserCertInfoSize,byte* RootCertInfo/*DER编码*/,int nRootCertInfo){int nRet = 0;int nErrCode = 0;PCCERT_CONTEXT pCertContextRoot = NULL; //连接CSPHCRYPTPROV hCryptProv = NULL;if(!CryptAcquireContextA(&hCryptProv,NULL,CspName,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT)){nErrCode = GetLastError();return 71;}//创建证书上下文pCertContextRoot = CertCreateCertificateContext(X509_ASN_ENCODING, RootCertInfo, nRootCertInfo);if (pCertContextRoot == NULL){ nErrCode = GetLastError();//0x8009310b 应该是证书的编码错了,不支持Base64编码只支持Der编码return 92;//92 创建证书上下文失败} //使用根公钥对用户证书验签if (!CryptVerifyCertificateSignature(hCryptProv,X509_ASN_ENCODING,UserCertInfo,nUserCertInfoSize,&(pCertContextRoot->pCertInfo->SubjectPublicKeyInfo)))  //CA证书公钥{nErrCode = GetLastError();return 93;//93 验证证书签名失败} return 0;}


0 0
原创粉丝点击