我在一个用C#实现的ASP.NET MVC应用程序中存储一些加密方法的私钥。我正在使用System.Security.Cryptography.CngKey类来创建和检索私钥。
我创建了这样的键:
key = CngKey.Create(CngAlgorithm.ECDiffieHellmanP521, keyName, new CngKeyCreationParameters { ExportPolicy = CngExportPolicies.AllowPlaintextExport });
我检索这样的密钥:
key = CngKey.Open(keyName);
这在大多数情况下工作得很好,但是在Web应用程序生产一段时间之后的一些部署中,我将在尝试检索密钥时开始收到此错误消息。
加密操作
SubjectDomainName IIS APPPOOL
ProviderName Microsoft软件密钥存储提供商
AlgorithmName ECDH_P521
KeyType 用户密钥
操作打开键
ReturnCode 0x8009000b
日志名称:安全性 任务类别:系统完整性
您会注意到它正在使用应用程序池标识,这是一个虚拟帐户。我怀疑这种情况正在发生,因为这是一个虚拟帐户。请记住,它可以正常工作一段时间,然后开始失败。有没有其他人遇到这个问题并找到了解决方案?是否有更好的方法来管理ASP.NET Web应用程序中的私钥?