首页 > 解决方案 > 生成 CrypoAPI (CAPI) 私钥

问题描述

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

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

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

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

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

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

那是一样的吗?

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

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

标签: asp.net-coreencryptioncertificatex509certificatecryptoapi

解决方案


您的“证书人”不正确。

Microsoft 有两个版本的密码学 susbsytems:Legacy CrypotAPI(简称 CryptoAPI 或 CAPI)和 Cryptography Next Generation(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 在其名称中包含NCryptBCryptCNGNG后缀/前缀,以明确表示它是 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-SelfSignedCertificatePowerShell cmdlet(默认为 CNG KSP)或 certreq.exe 工具生成由外部 CA 签名的请求时。这部分取决于您用于创建证书/证书请求的工具。


推荐阅读