Winapi AcquireCredentialsHandle返回SEC_E_NO_凭证

Winapi AcquireCredentialsHandle返回SEC_E_NO_凭证,winapi,sspi,Winapi,Sspi,我已经使用CertOpenSystemStore打开了证书存储,我可以使用CertFindCertificateInstance找到我的自签名证书(使用OpenSSL创建),该证书是我通过Windows Vista Ultimate上的MMC控制台安装的。但是我不确定这个错误的真正含义,因为我无法在MSDN文档中找到答案。这是证书问题吗?或者是一个操作系统问题,从某种意义上说,它应该是一个Windows服务器操作系统,这样才能工作 我在Delphi2010中使用Win32 API,但C示例很好

我已经使用CertOpenSystemStore打开了证书存储,我可以使用CertFindCertificateInstance找到我的自签名证书(使用OpenSSL创建),该证书是我通过Windows Vista Ultimate上的MMC控制台安装的。但是我不确定这个错误的真正含义,因为我无法在MSDN文档中找到答案。这是证书问题吗?或者是一个操作系统问题,从某种意义上说,它应该是一个Windows服务器操作系统,这样才能工作

我在Delphi2010中使用Win32 API,但C示例很好

谢谢,
Bruce

关于如何启用schannel登录的+1链接中的错误描述非常有用。谢谢。您有在WIndows Vista上使用OpenSSL生成有效SSL/TLS证书的链接吗?您可以在Schannel中使用的加密级别有限制吗?这看起来像是我的问题,但我使用的UNISP_名称=‘Microsoft统一安全协议提供程序’,这似乎是唯一有效的。感谢您提供更多的提示,因为我很难找到关于这个主题的明确信息。我看到CertOpenStore的hCryptProv参数现在被记录为legacy,应该为NULL。在Win2k3中,这需要是SChannel CSP,然后生成的HCERTSTORE需要作为hCertRoot传递给作为pAuthData传递给AquiRecredentialHandle的SChannel_CRED结构。从我在Vista中看到的情况来看,它们只支持从MyUser或MyComputer存储区加载证书,这意味着您不能传入任意证书,您可以传入凭据并让系统选择正确的证书。我可能走了,在MSDN中,整个区域都是灰色的。我可以使用CertFindCertificateInstance获取证书,它返回正确的证书,但当我将CertContext和CertStore传递给AcquireCredentialsHandle时,我得到了“安全包中没有可用的凭据”错误。该错误使我相信我使用了错误类型的证书私有/公共证书(错误的哈希或其他内容),但我找不到它应该是什么。我一直在使用这个项目中的.bat文件;但是没有运气。是的,听起来很熟悉。如果您将Certcontext和CertStore传递给ACH,则cert store必须是SChannel CSP,而不是默认的CSP。打开SChannel日志,在it详细信息中,您将找到用于查找证书的CSP。您的证书必须加载到该CSP存储中。