windowsAPI验证上下级证书关系
生活随笔
收集整理的這篇文章主要介紹了
windowsAPI验证上下级证书关系
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
現象:
調用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;//連接CSP HCRYPTPROV 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; }
總結
以上是生活随笔為你收集整理的windowsAPI验证上下级证书关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装SSL证书-解决导入证书时的ASN1
- 下一篇: 如何配置IIS服务器使用的中间证书( 微