如何使用CryptoAPI在windows7上获取证书信任列表
How do i get Certificate Trust List on windows7 using CryptoAPI
我想使用Crypto API在Windows7上获取CTL(证书信任列表),我使用CertFindCTLInStore函数,但它总是返回false;GetLastError()函数返回-2146885682,我不知道我哪里做错了。代码如下:
hCertStore=CertOpenSystemStore(NULL,pszStoreName);
if(NULL != hCertStore)
{
char buffer[8*1024];
memset(buffer,0,sizeof(buffer));
PCCTL_CONTEXT pCTL = CertCreateCTLContext(
X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,
(const BYTE*)buffer,
sizeof(buffer));
CTL_FIND_USAGE_PARA usagePara;
//first
pCTL = CertFindCTLInStore(
hCertStore,
X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,
0,
CTL_FIND_ANY,
NULL,
NULL);
if (NULL != pCTL)
{
printf("Find a CTLn");
}
else
{
printf("Error Code :%dn",GetLastError());
}
//Second
CRYPT_HASH_BLOB cryBlob;
pCTL = CertFindCTLInStore(
hCertStore,
X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,
0,
CTL_FIND_SHA1_HASH,
&cryBlob,
NULL);
if (NULL != pCTL)
{
printf("Find a CTLn");
}
else
{
printf("Error Code :%dn",GetLastError());
}
//third
pCTL = CertFindCTLInStore(
hCertStore,
X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,
0,
CTL_FIND_MD5_HASH,
&cryBlob,
NULL);
if (NULL != pCTL)
{
printf("Find a CTLn");
}
else
{
printf("Error Code :%dn",GetLastError());
}
//fourth
CTL_FIND_USAGE_PARA ctlPara;
pCTL = CertFindCTLInStore(
hCertStore,
X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,
0,
CTL_FIND_USAGE,
&ctlPara,
NULL);
if (NULL != pCTL)
{
printf("Find a CTLn");
}
else
{
printf("Error Code :%dn",GetLastError());
}
//fifth
CTL_FIND_USAGE_PARA ctlPara2;
pCTL = CertFindCTLInStore(
hCertStore,
X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,
0,
CTL_FIND_SAME_USAGE_FLAG,
&ctlPara2,
NULL);
if (NULL != pCTL)
{
printf("Find a CTLn");
}
else
{
printf("Error Code :%dn",GetLastError());
}
//six
CTL_CONTEXT ctlText;
pCTL = CertFindCTLInStore(
hCertStore,
X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,
0,
CTL_FIND_EXISTING,
&ctlText,
NULL);
if (NULL != pCTL)
{
printf("Find a CTLn");
}
else
{
printf("Error Code :%dn",GetLastError());
}
//seven
CTL_FIND_SUBJECT_PARA ctlSubPara;
pCTL = CertFindCTLInStore(
hCertStore,
X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,
0,
CTL_FIND_SUBJECT,
&ctlSubPara,
NULL);
if (NULL != pCTL)
{
printf("Find a CTLn");
}
else
{
printf("Error Code :%dn",GetLastError());
}
我打赌你得到的不是-2146885682,而是-2146885628,也就是0x80092004,也就是CRYPT_E_NOT_FOUND
。很简单,商店里没有CTL。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 通过 OpenSSL C++从证书获取颁发者证书
- 以编程方式获取颁发者证书C++
- 无法在 libcurl 中获取证书位置
- 获取X509代码签名证书的序列号,以不受管理的C/C 签名
- 如何在OpenSSL中获取SSL证书
- 如何从连接的 SSL 会话获取 base64 编码证书 (PEM)
- 获取Openssl证书错误中的错误字符串
- 有没有办法获取 OpenSSL X509 证书名称,该证书名称将在 C++ 中发送到对等方
- 如何以编程方式从火狐浏览器获取证书
- 使用 C++ 在窗口上获取 SSL 证书
- 什么是客户端证书,从哪里获取它,如何使用它连接到服务器?
- 如何使用CryptoAPI在windows7上获取证书信任列表
- 获取POCO HTTPSClientSession发送请求时出错-证书验证失败
- 使用CryptoAPI从PFX证书获取X509数据
- 如何在CryptoAPI中通过证书公钥获取密钥容器的信息
- 如何获取有关客户端证书的信息