生成 CrypoAPI (CAPI) 私钥

Vac*_*ano 2 encryption certificate cryptoapi x509certificate asp.net-core

我正在尝试使用IXmlEncryptor实现静态加密。特别是使用 CertificateEncryptor。(这是 IXmlRepository 系统的一部分,用于在 ASP.NET Core 中共享用于解密 cookie 和一般密钥管理的密钥。)

文档页面讨论了为此目的使用 X.509 证书。

它表示“仅支持带有CAPI 私钥的证书”。

谷歌搜索显示 CAPI 意味着 Microsoft CryptAPI。但我找不到更多关于它的信息,我能找到的似乎与 C++ 相关。

当我问他什么是“CAPI 私钥”时,我的“证书人员”基本上告诉了我这一点:

Microsoft 生成的转换为 x509 的 PFX 文件有密码。那将是我唯一能想到的。

那是同一件事吗?

如果没有,如何创建带有 CAPI 私钥的 X.509 证书?

注意:X.509 证书是文档页面上列出的可在Linux 机器(容器)上运行的唯一选项。这就是为什么我不考虑任何其他(可能更简单)的选择。

Cry*_*t32 5

你的“证书人”是不正确的。

Microsoft 有两个版本的加密子系统:Legacy CrypotAPI(简称 CryptoAPI 或 CAPI)和下一代加密(CNG、CAPI2)。

CrytpoAPI 是在 Windows 2000 中发明的。 Legacy CryptoAPI 在道德上已经过时,不支持 ECC、SHA2:只有 RSA/legacy 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 中可用(之前存在实现,但存在已知限制),并且 3rd 方应用程序仅在明确添加对 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
Run Code Online (Sandbox Code Playgroud)

您可以在 Windows 上创建证书(密钥对)时指定其中任何一个。例如,当使用New-SelfSignedCertificatePowerShell cmdlet(默认为 CNG KSP)或 certreq.exe 工具生成由外部 CA 签名的请求时。这部分取决于您用于创建证书/证书请求的工具。