- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我调用AcquireCredentialsHandle在内核驱动程序中,传入 SCHANNEL_CRED dwCredFormat
设置为 SCH_CRED_FORMAT_CERT_HASH
。它因 SEC_E_NO_CREDENTIALS
而失败。这是我的代码:
BYTE certHashBytes[20] = { 0x6d,0x64,0xed,0x56,0xd2,0x94,0x15,0xf4,0x49,0x08,0xaf,0x18,0xf1,0xca,0xf5,0xa2,0xc8,0x01,0x20,0x96 };
CredHandle credHandle;
RtlZeroMemory(&credHandle, sizeof(CredHandle));
SCHANNEL_CRED schannelCred;
RtlZeroMemory(&schannelCred, sizeof(SCHANNEL_CRED));
schannelCred.dwVersion = 4;
schannelCred.cCreds = 1;
schannelCred.paCred = certHashBytes;
schannelCred.dwCredFormat = 1;
UNICODE_STRING unispName;
RtlUnicodeStringInit(&unispName, L"Microsoft Unified Security Protocol Provider");
TimeStamp ts;
SECURITY_STATUS res = AcquireCredentialsHandle(NULL, &unispName, SECPKG_CRED_INBOUND, NULL, &schannelCred, NULL, NULL, &credHandle, &ts);
DbgPrintEx(DPFLTR_IHVNETWORK_ID, DPFLTR_INFO_LEVEL, "AcquireCredentialsHandle %x\n", res);
对于用户帐户和本地计算机,我的证书哈希绝对正确,并且正确安装在我的商店中。我知道这一点是因为它在用户模式下工作正常,如下所示:
HCERTSTORE certStore = CertOpenSystemStore(NULL, L"MY");
BYTE certHashBytes[20] = { 0x6d,0x64,0xed,0x56,0xd2,0x94,0x15,0xf4,0x49,0x08,0xaf,0x18,0xf1,0xca,0xf5,0xa2,0xc8,0x01,0x20,0x96 };
CERT_NAME_BLOB certHash { 20, certHashBytes };
PCCERT_CONTEXT cert = CertFindCertificateInStore(certStore, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_SHA1_HASH, &certHash, NULL);
CredHandle credHandle;
ZeroMemory(&credHandle, sizeof(CredHandle));
SCHANNEL_CRED cred;
ZeroMemory(&cred, sizeof(SCHANNEL_CRED));
cred.dwVersion = SCHANNEL_CRED_VERSION;
cred.cCreds = 1;
cred.paCred = &cert;
SECURITY_STATUS res = AcquireCredentialsHandle(NULL, const_cast<LPWSTR>(UNISP_NAME), SECPKG_CRED_INBOUND, NULL, &cred, NULL, NULL, &credHandle, NULL);
我相信我完全遵循了关于如何使用 SCH_CRED_FORMAT_CERT_HASH
的 MSDN 说明 - 有什么问题吗?
最佳答案
如果不调试就很难确定,但是我看到了一些可能是问题的地方:- 如果无法验证证书链;或者它是自签名的;或者在您的代码执行检查 CRL 时机器无法访问互联网,您的调用将失败。如果是这种情况,请使用 CRYPT_E_NO_REVOCATION_CHECK
- 如果您的证书用于向远程服务器证明身份是正确的?
Windows 中最近的一些安全强化措施在证书方面非常挑剔。自签名证书有时比签名证书更容易测试。我已经看到越来越多的应用程序因为没有 100% 证明的证书而停止工作。缺少它,我看不出问题是什么。
关于c++ - 使用 SCH_CRED_FORMAT_CERT_HASH 时,AcquireCredentialsHandle 在内核模式下失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51669302/
我正在为 Windows SSPI API 开发 .Net 包装器.多个 API 函数返回过期时间,例如,凭证或安全上下文过期。 到期时间存储在64位结构中,TimeStamp ,它存储自 1601
我有一段代码试图为我无法工作的远程计算机上的用户获取凭据。目前这会在运行时产生访问冲突错误 (0xc0000005): SEC_WINNT_AUTH_IDENTITY_W identity; Zero
我创建了一个自签名证书(使用 OpenSSL 创建),并使用 Windows Vista Ultimate 上的证书 MMC 管理单元 (CertMgr.msc) 将其安装到证书存储中。 我已成功使用
背景 Windows SSPI API是 Windows 安全服务的一个接口(interface),允许您相互验证客户端和服务器。 API 的主要用途之一是提供 Windows 集成身份验证,也称为单
尝试运行 Microsoft 的 Secure SOAP 示例中的代码时出现上述错误 http://msdn.microsoft.com/en-us/library/s2ya483s.aspx 来自
我调用AcquireCredentialsHandle在内核驱动程序中,传入 SCHANNEL_CRED dwCredFormat 设置为 SCH_CRED_FORMAT_CERT_HASH。它因 S
我以某种方式得出了这个 api 调用的签名,但是这个调用没有以预期的方式工作。一些重要的数据结构没有得到正确填充,因此我没有得到预期的输出。我使用的签名是: [DllImport("secur32.d
我有一段简单的 https 连接代码,可以很好地与一个 ssl 主机一起工作,即使根证书颁发机构不受信任也可以连接(这是一个沙盒环境,所以我们不担心这会造成安全漏洞,因为现在),并使用 Nuget 包
我是一名优秀的程序员,十分优秀!