gpt4 book ai didi

c++ - 来自系统存储的证书上下文始终具有无效的 pbCertEncoded 指针

转载 作者:可可西里 更新时间:2023-11-01 10:48:59 28 4
gpt4 key购买 nike

我正在尝试在 CryptoAPI 中使用 CertEnumCertificatesInStore() 来遍历所有根证书并将它们编码为 PEM 文件以用于 OpenSSL。我已经找到了几个这样的例子,所以它似乎是可能的,但是,我为每个证书返回的 PCCERT_CONTEXT 都有一个无效的 pbCertEncoded 指针和 cbCertEncoded(缓冲区大小)始终为 0,但我觉得这不应该是作为示例的案例使用编码缓冲区将证书转换为其他格式。有没有其他人遇到过这个获取空缓冲区的问题或者可以看到我遗漏的步骤?

我已经验证我实际上正在使用 CryptUIDlgViewContext() 函数获取证书。我觉得我缺少一些非常基本的东西。基本代码如下:

HCERTSTORE hStore = CertOpenSystemStore(NULL, L"ROOT");

for ( PCCERT_CONTEXT pCertContext = CertEnumCertificatesInStore(hStore, NULL); pCertContext != NULL; pCertContext = CertEnumCertificatesInStore(hStore, pCertContext) )
{

// This shows the certificates fine
CryptUIDlgViewContext(CERT_STORE_CERTIFICATE_CONTEXT, pCertContext, NULL, NULL, 0, NULL)

// but
// pCertContext->pbCertEncoded is a Bad Ptr and
// pCertContext->cbCertEncoded is always 0

// If i try
TCHAR *OutString = NULL;
DWORD Size = 0;
DWORD lastError;
BOOL success = CryptBinaryToString(pCertContext->pbCertEncoded, pCertContext->cbCertEncoded, CRYPT_STRING_BASE64,OutString, &Size);

if( !success )
{
// I get a invalid parameter error here.
lastError = GetLastError();
}
}

最佳答案

在 64 位编译时,编码缓冲区不会被填充。用 32 位编译似乎可以解决这个问题。

关于c++ - 来自系统存储的证书上下文始终具有无效的 pbCertEncoded 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12538524/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com