证书存储在 Windows 证书存储中时如何解密信息

How are information decrypted when the certificate is stored in Windows certificate store

我正在尝试学习一些有关 Windows 应用程序开发的知识,但我还没有完全了解证书处理。

加密和解密是由 Windows OS 函数处理的,还是通过从存储中获取私钥并分别执行加密任务来处理的?

举个例子:假设我有一些使用 SSL 证书的 IIS 托管的网页。 是例如IIS Web 服务器使用像下面这样的 api 调用,或者 IIS 是否使用商店中的某些用户选择的证书请求 OS 到 encrypt/decrypt? https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.x509certificates.rsacertificateextensions.getrsaprivatekey?view=net-5.0

在给定的情况下,IIS 获取私钥句柄并调用 CrypoAPI 函数来执行加密操作。虽然,IIS 不使用引用 API,它直接使用本机函数。

Windows 通过为加密定义 API 来使用抽象层,而这些 API 的一个重要部分是密钥句柄。 OS 可能无法访问原始密钥 material 并使用密钥句柄访问密钥所有者的密钥。密钥所有者作为加密服务提供程序 (CSP) 或现代密钥存储提供程序 (KSP) 实现。必要时,OS 调用实现的 API 并将密钥句柄传递给 CSP 或 KSP。然后 CSP/KSP 实现负责原始密钥 material 访问实际的密码操作。 CSP/KSP 实施是特定于供应商的。 Windows 发布了十几个基于软件的 CSP/KSP 实现,第 3 方供应商可能会发布他们自己的实现,尤其是当密钥存储在硬件(智能卡或 HSM)上时。

无论如何,OS 不关心密钥的存储方式和存储位置,它只是调用已定义的 API,传递密钥句柄和输入参数。 CSP/KSP 然后访问原始密钥 material,执行请求的操作并将 return 结果返回给调用者。

这是您问题的答案:加密操作由 CSP/KSP 处理,owns/stores 由密钥句柄标识的特定密钥。是否 OS 取决于 CSP/KSP 实现。如果它是软件,那么它很可能(不是必需的,但经常)由 OS 处理。如果是硬件,那就由硬件自己处理。