我正在尝试运行此示例中的代码
https://docs.microsoft.com/en-us/dotnet/standard/security/how-to-store-asymmetric-keys-in-a-key-container
在.NetCore 2.0(Web应用程序)下。
但是当我尝试使用执行任何行时
CspParameters
我收到以下错误
'CspParameters' requires Windows Cryptographic API (CAPI), which is not available on this platform.
请就我的解决方法提出建议。谢谢。
.NET不存储加密密钥,这最终是它所基于的加密平台提供(或不提供)的功能。
要将CspParameters与.NET Core一起使用,必须在Windows上运行;因为那是(旧的)Windows加密API的非常薄的包装。您不能在UAP中使用它,因为UAP仅允许使用较新的加密技术:下一代(CNG)API。
macOS可以将密钥存储在钥匙串中,但是.NET Core不提供用于读取密钥的API。
Linux(OpenSSL)除了“将其保存到文件并再次加载”之外没有任何密钥存储机制,但是.NET Core不支持从文件加载非对称密钥。
在跨平台机制中实现目标的唯一方法是使非对称密钥与X.509证书关联。如果您构建的X509Certificate2对象HasPrivateKey
返回了true,则可以将其保存到PFX / PKCS#12文件,然后从该文件加载。或者,您可以将其添加到X509Store实例(CurrentUser的“我的”存储是在所有平台上最有效的存储),然后从X509Store实例读回。
尽管您引用的页面声称是在2017年编写的,但真正的含义是该内容于该日期从其先前在msdn.microsoft.com的位置移动。原始页面写于2008年(至少,这是对web.archive.org的首次访问),因此它早于.NET Core。