您的"证书专家"是错误的。
微软有两个加密系统版本:传统CryptAPI(简称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中,密钥存储在重新设计的CSP中,称为密钥存储提供程序(KSP),以将其与传统CSP区分开来,因为它们不同(尽管存在从KSP访问CSP的单向桥梁,但不是反之亦然)。
然而,.NET在采用CNG方面一直在努力,并且只有在.NET 4.7中才使其可以使用(尽管实现之前已存在,但具有已知限制),并且仅当第三方应用程序明确添加对其的支持时,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上创建证书(密钥对)时指定任何一个选项。例如,使用默认的CNG KSP的
New-SelfSignedCertificate
PowerShell cmdlet或certreq.exe工具生成请求以由外部CA签名。此部分取决于您用于创建证书/证书请求的工具。
System.Security.Cryptography.RSA
实现之间,RSACryptoServiceProvider
类基于传统的CryptoAPI工作,而RSAKey
则由CNG支持。 - Seva Alekseyev