gpt4 book ai didi

visual-studio - 为什么重启后我的 key 容器会丢失?

转载 作者:行者123 更新时间:2023-12-01 19:50:09 31 4
gpt4 key购买 nike

多年来,我们一直将强名称 key 保存在 key 容器中。 Visual Studio 不直接支持这一点,但是,如果您只需编辑 .csproj 文件并添加以下内容,它就可以正常工作:

<KeyContainerName>MyKeyName</KeyContainerName>

我们通过执行以下操作将 key 安装到 key 存储中:

sn -m Y
sn -i MyKeyFile.snk MyKeyName

然后我们可以从该计算机中删除 MyKeyFile.snk,这样 key 就更安全了。

最近,重启后就出现了这个问题。我们怀疑该问题是由 VS 2015 引入的,但它可能是由 Windows 8 和/或 10 引起的。我们将 key 安装到 key 容器中,一切正常。然后,我们重新启动该机器,构建失败并显示:

CSC : error CS7028: Error signing output with public key from container 'MyKeyName' -- Keyset does not exist (Exception from HRESULT: 0x80090016)

看起来 key 容器在重新启动时丢失了,但是,如果我们这样做:

sn -m Y
sn -i MyKeyFile.snk MyKeyName

它失败了:

Failed to install key pair -- Object already exists.

我们必须使用 sn -d 删除 key 容器,然后将其添加回来,Visual Studio 就满意了。

这是怎么回事?为什么当 sn 可以看到我们的 key 容器时,Visual Studio 在重新启动后看不到它?关键容器实际存储在哪里?

最佳答案

首先,在使用“sn -m”命令在基于机器的 key 和基于用户的 key 之间切换时需要小心。该命令区分大小写,处理无效值时就像未指定值一样,显示当前设置。因此,“sn -m Y”不会启用基于机器的 key ,您必须说“sn -m y”(小写 y 或 n)。

当前版本的 CSC.exe 似乎仅使用基于计算机的 key 。我不知道这是否是最近的更改,但这是我在使用 .NET V4.6 和 VS 2015 时观察到的行为。

机器 key 保存在 C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys 中。当您执行“sn -i file.snk name”来安装 key 时,会在该目录中创建一个文件。该文件以几个 GUID 命名,因此您必须查看修改日期才能确定刚刚创建的文件。

如果您检查新文件的属性并查看“安全”选项卡,您将看到“LogonSessionId_n_nnn”条目。 ACL 中的该条目授予您的登录 session 访问权限,但如果重新启动,您将获得不同的登录 session ,因此该条目不再授予您访问权限。这就是为什么我们可以安装强名称 key 并使用它们直到重新启动为止。它还解释了为什么在重新安装之前需要删除 key , key 仍然在那里,但是我们无法访问它。

您可以编辑该文件的 ACL,并使用 AD 用户名或组授予自己“读取、读取和执行”访问权限,并且强名称 key 即使在重新启动后也将起作用。

关于visual-studio - 为什么重启后我的 key 容器会丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32745415/

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