gpt4 book ai didi

c# - 即使使用 X509KeyStorageFlags.PersistKeySet,私钥也不会保留

转载 作者:行者123 更新时间:2023-11-30 18:43:28 25 4
gpt4 key购买 nike

我已经搜索了很长时间,但我无法找到以下问题的答案。我在 Windows 应用商店中存储了一个 key 对,最近开始收到“ key 集不存在”错误。进一步调查,我发现这可能是两件事,1 - 私钥未与持久 key 集属性 (X509KeyStorageFlags.PersistKeySet) 一起存储,2 - 对 key 的访问权限。我在一台机器上尝试了 1 和 2 但都没有成功(在我的机器上它显然有效)。奇怪的是,当我查看 Microsoft\Crypto\RSA\MachineKeys(和 S-1-5-18)时, key 仍然存在,但仅保留一段时间,然后被删除,这意味着它不会持续存在。

//If decoded then save as RSACryptoServiceProvider
newCert.PrivateKey = DecodePrivateKey(privateKeyFile, pkPassword)<p></p>

<p>if (newCert.PrivateKey == null)
throw new System.NullReferenceException("Decoded private key resulted in a null reference. Unable to store certificate.");</p>

<p>byte[] pfx = newCert.Export(X509ContentType.Pfx);
newCert = new X509Certificate2(pfx, string.Empty, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet);</p>

我在 IIS 上托管的 WCF 服务上运行此代码,即使我通过 MMC-CertMgr 授予网络服务、AppPoolIdentity、我的帐户等权限,证书也会被删除。有谁知道为什么会这样吗?

提前致谢!

更新:我今天刚刚发现,由于我是通过 WCF 服务执行此操作的,因此应用程序池在达到其空闲时间限制时会删除私钥,因此我完全确定是应用程序池处理了私钥这会导致 key 从 Microsoft\Crypto\RSA\MachineKeys 和 S-1-5-18 文件夹中删除。今天我离开了一个测试运行,我在应用程序池中禁用了空闲时间关闭但我仍然不确定私钥是否会随着重启或类似的事情而停止持久存在?

有人知道如何让应用程序池停止删除我的私钥吗?

最佳答案

我不确定这种特殊情况,但在工作中我们在 Web 应用程序上下文中使用 RSACryptoServiceProvider 时也遇到了问题。

解决问题的方法是将相应 ApplicationPool 上的“Load User Profile”设置为“true”。在我们的例子中,我们实际上得到了 PermissionDenied 错误,所以不确定它是否适合你。

关于c# - 即使使用 X509KeyStorageFlags.PersistKeySet,私钥也不会保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4394203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com