大佬教程收集整理的这篇文章主要介绍了有没有API可以在Windows上预先检索受信任的根证书列表?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
wincertstore
,但它是无用的,因为在具有最近安装的操作系统的机器上,该商店几乎是空的.
@H_139_15@microsoft提供detailed instructions for administrators预先检索该列表,以便能够操作具有严格控制的网络访问的机器;但是,我找不到任何可以做同样事情的API的引用,只需从Microsoft下载所有受信任的根证书. (老实说,在每周多兆字节系统更新的时代,我不明白为什么预先下载这些是如此之大,如果它只是一个缓存;奖金积分请解释为什么这需要发生.)
那么,是否有API可以让我告诉系统只是根据它使用的规则预先缓存受信任的根证书?如果这是真的不可能的话(如果CryptoAPI只能一次下载一个信任根,并且只有在给它一个根目录下签名的证书的话)时,是否有办法将OpenSSL证书验证连接到CryptoAPI的信任存储,以便验证将下载并缓存信任根,就像一个本机TLS连接一样?
#include <Windows.h> #include <WinCrypt.h> #pragma comment(lib,"crypt32.lib") #include <stdio.h> void process_cert(PCCERT_COntexT cert) { PCCERT_CHAIN_COntexT ccc; CERT_CHAIN_PARA ccp = {sizeof(CERT_CHAIN_PARA)}; DWORD flags; char certname[256]; CertGetNameStringA(cert,CERt_name_SIMPLE_DISPLAY_TYPE,NULL,certname,_countof(certName)); flags = 0; if (!CertGetCertificateChain(HCCE_LOCAL_MACHINE,cert,&ccp,flags,&ccC)) { printf("Certificate %s CertGetCertificateChain: %u\n",GetLastError()); } else { printf("Certificate %s : %x (%X)\n",ccc->TrustStatus.dwErrorStatus,ccc->TrustStatus.dwInfoStatus); } } void mainfn(void) { HCERTSTORE sst; PCCERT_COntexT cert; DWORD count; sst = CertOpenStore(CERT_STORE_PROV_FILename_W,(HCRYPTPROV)NULL,CERT_STORE_OPEN_EXISTinG_FLAG | CERT_STORE_READONLY_FLAG,L"c:\\downloads\\roots.sst"); if (sst == NULL) { printf("CertOpenStore: %x\n",GetLastError()); return; } for (cert = NULL,count = 0; cert = CertEnumCertificatesInStore(sst,cert); count++) process_cert(cert); { DWORD err = GetLastError(); if (err != CRYPT_E_NOT_FOUND) { printf("CertEnumCertificate: %u\n",err); return; } } } int main(int argc,char ** argv) { mainfn(); return 0; }
或者,在您的上下文中,您可能希望直接在.sst文件中使用根证书,而不必将其添加到根存储. (在这种情况下,您应该可以枚举根存储以及.sst文件,以便包括任何本地添加的证书.)
以上是大佬教程为你收集整理的有没有API可以在Windows上预先检索受信任的根证书列表?全部内容,希望文章能够帮你解决有没有API可以在Windows上预先检索受信任的根证书列表?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。