应用对象
Win 10 Ent LTSB 2016 Win 10 Ent LTSC 2019 Windows 10 IoT Enterprise LTSC 2021 Windows 10, version 22H2, all editions Windows 11 Home and Pro, version 22H2 Windows 11 Enterprise Multi-Session, version 22H2 Windows 11 Enterprise and Education, version 22H2 Windows 11 IoT Enterprise, version 22H2 Windows 11 SE, version 23H2 Windows 11 Home and Pro, version 23H2 Windows 11 Enterprise and Education, version 23H2 Windows 11 Enterprise Multi-Session, version 23H2 Windows 11 version 24H2, all editions Windows 11 version 25H2, all editions Windows Server 2012 ESU Windows Server 2012 R2 ESU Windows Server 2016 Windows Server 2019 Windows Server 2022 Windows Server 2025

原始发布日期: 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) 。

重要: 请勿使用 CryptAcquireContextWCryptAcquireContextA 函数,因为 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

值数据

  • 1 = 启用修复

  • 删除 0 或密钥 = 禁用修复 – 切换到审核模式

参考资料

密钥存储和检索

CryptAcquireCertificatePrivateKey 函数 (wincrypt.h)

CVE-2024-30098 |Windows 加密服务安全功能绕过漏洞

.

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。