您的“证书人”不正确。
Microsoft 有两个版本的加密系统:Legacy CrypotAPI(简称 CryptoAPI 或 CAPI)和下一代加密技术(CNG、CAPI2)。
CrytpoAPI 是在 Windows 2000 中发明的。旧版 CryptoAPI 在道德上已经过时,不支持 ECC、SHA2:仅支持 RSA/旧版 DSA(最多 1k 长密钥)、DES/3DES、RCx,没有内置 AES。密钥存储在传统加密服务提供商(或 CSP)中。不过,在 Windows Vista+ 中,添加了具有 SHA2 和 AES 的旧版 CSP,以帮助旧应用程序利用它们,而无需对代码进行太多更改。
CNG 于 2007 年在 Windows Vista/Windows Server 2008 中首次引入,确实是一个好东西:它非常可扩展,具有 NSA Suite B 加密技术(ECC 非对称密钥、SHA2 算法组)的本机支持、密钥隔离、统一的密钥集BCrypt 的功能还必须更多。大多数仅限 CNG 的 API 包括NCrypt
, BCrypt
, CNG
, NG
名称中的后缀/前缀明确表示它是 CNG API。在 CNG 中,密钥存储在重新设计的称为密钥存储提供程序 (KSP) 的 CSP 中,以将其与传统 CSP 区分开来,因为它们不相同(尽管有一个单向桥可以从 KSP 访问 CSP,但除此之外则不然)。
然而,.NET 在采用 CNG 方面遇到了困难,并且仅在 .NET 4.7 中或多或少可用(以前存在实现,但有已知的限制),并且第 3 方应用程序仅在明确添加对 CNG 的支持时才支持 CNG,因为 CNG使用不同的 API,并且 .NET Framework 升级不会使应用程序支持 CNG。
这是关于 CAPI 和 CAPI2 之间差异的一些理论。
您的文档表明它需要使用旧版 CSP 来存储私钥的证书。在 Windows 中创建时,如果使用以下提供程序之一,则使用旧版 CSP:
Microsoft Base Cryptographic Provider v1.0
Microsoft Base DSS and Diffie-Hellman Cryptographic Provider
Microsoft Base DSS Cryptographic Provider
Microsoft Base Smart Card Crypto Provider
Microsoft DH SChannel Cryptographic Provider
Microsoft Enhanced Cryptographic Provider v1.0
Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider
Microsoft Enhanced RSA and AES Cryptographic Provider
Microsoft RSA SChannel Cryptographic Provider <- this is preferred for legacy CSPs
Microsoft Strong Cryptographic Provider
您可以在 Windows 上创建证书(密钥对)时指定其中任何一个。例如,当使用New-SelfSignedCertificate
PowerShell cmdlet(默认为 CNG KSP)或 certreq.exe 工具,用于生成由外部 CA 签名的请求。这部分取决于您用于创建证书/证书请求的工具。