原始发布日期: 2025 年 11 月 21 日
KB ID:5073121
简介
2025 年 10 月 14 日,解决 CVE-2024-30098 的 Windows 更新暴露了以下问题:代码未正确标识哪个提供程序正在管理从智能卡传播到证书存储的证书的密钥。 这种错误定义可能导致加密作在某些情况下失败。 本文档为应用程序开发人员提供了有关如何检测正确处理程序并解决这些问题的指导。
摘要
当证书从智能卡传播到 Windows 证书存储时,传播过程可以使用以下任一提供程序:
-
旧式加密服务提供程序 (CSP) ,它依赖于旧的加密应用程序编程接口 (CAPI)
-
密钥存储提供程序 (KSP) ,它依赖于加密 API:下一代 (CNG) 。 这是 Windows Vista 中引入的新式替换。
在 CVE-2024-30098 修复之前,传播算法将 CSP 用于基于 RSA 的证书,将 KSP 用于所有其他证书。 此方法不安全,因为 CAPI 不支持新式加密算法,限制了安全功能。
2025 年 10 月 14 日安全更新删除了此特殊处理,现在 KSP 用于所有证书。
确定要使用的 API 集
当密钥由 KSP 管理时,依赖于 CSP 管理的 RSA 密钥的应用程序可能会失败。 若要解决此问题,应用程序必须检测哪个提供程序管理密钥,并使用相应的 API 集 (CAPI 或 CNG) 。
重要: 请勿使用 CryptAcquireContextW 或 CryptAcquireContextA 函数,因为 API 已弃用。 请改用 CryptAcquireCertificatePrivateKey 函数。
CryptAcquireCertificatePrivateKey 函数
调用 CryptAcquireCertificatePrivateKey (phCryptProvOrNCryptKey) 类型为 HCRYPTPROV_OR_NCRYPT_KEY_HANDLE。 此句柄可以是:
-
CSP 句柄 (HCRYPTPROV) :使用CryptSignHash 等 CryptoAPI 函数。
-
CNG 句柄 (NCRYPT_KEY_HANDLE) :使用 NCryptSignHash 等 CNG 函数。
注意: 调用 CryptAcquireCertificatePrivateKey 时,请务必在 dwFlags 参数中包含 CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG 。
若要确定句柄类型,检查 pdwKeySpec 值:
|
pdwKeySpec 值 |
要使用的加密 API |
|
AT_KEYEXCHANGE或AT_SIGNATURE |
CAPI |
|
CERT_NCRYPT_KEY_SPEC |
CNG |
解决方法
受实施此更改影响的客户可以使用临时解决方法。 可以使用临时注册表项将行为从 “强制” 切换到 “审核 ”模式。
重要提示: 2026 年 4 月更新中将删除对此注册表项的支持。
|
注册表路径 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Calais |
|
类型 |
REG_DWORD |
|
值名称 |
DisableCapiOverrideForRSA |
|
值数据 |
|
参考资料
CryptAcquireCertificatePrivateKey 函数 (wincrypt.h)
CVE-2024-30098 |Windows 加密服务安全功能绕过漏洞
.