2010-11-14 94 views
15

我通常不会打扰我的.NET程序集签名,所以除了它的基本机制外,我不太了解它。对于我正在开发的一个小项目,有必要签名,并且我创建了一个新的密钥,并使用密码进行保护。存储强名密钥的密码在哪里?

我希望在重新编译程序集的某个时间点提示输入此密码,但是在创建密钥文件后,我从不需要在任何位置输入密码。这似乎首先破坏了密码保护密钥的目的。

我想象的密码缓存在某处,但在哪里?它在某种私人存储空间中吗?如果我将其整个解决方案目录与其中的密钥文件交给其他人,他们会被提示输入我输入的密码,还是可以在没有密码的情况下签署程序集?

在互联网上有很多关于强名称键和使用它们的文章,但是由于某些奇怪的原因,他们都忽略了Visual Studio实际使用密码的方式。

更新: 重新启动Visual Studio(和Windows)没有效果,因此缓存看起来是持久的。删除.suo文件不会改变签署程序集时不需要密码的事实。

+0

你是如何保护文件密码的? – 2010-11-14 13:09:35

+0

@Lasse:当您创建密钥时,Visual Studio可以选择密码保护密钥。我已经通过打开.pfx文件验证了它是受保护的。 – Thorarin 2010-11-14 13:37:23

+0

谢谢,我不知道。 – 2010-11-14 14:05:58

回答

11

请参阅Create Strong Name Key Dialog Box的文档。

密码信息存储在您的计算机的加密存储数据库中。

其他信息来自CLR Inside Out: Using Strong Name Signatures

您可以使用限制性访问控制列表(ACL)将密钥安装在密钥容器中,以防止未经授权访问密钥容器。或者,您可以将私钥存储在智能卡或其他单独的硬件设备上。 sn.exe工具允许您使用不同的加密服务提供程序(CSP)进行签名。查看sn.exe文档中的-c选项。

+1

有趣...首先,我找不到任何有关此“加密存储数据库”的参考。从那时起,我发现我可以使用'sn.exe'来向强名称CSP添加和删除密钥。我仍然遇到的一个问题是,Visual Studio似乎为密钥生成一个随机容器名称,所以我不知道如何删除与我的项目相关的容器名称。您不能使用sn.exe列出所有容器名称。 – Thorarin 2010-11-16 19:45:11

+1

调查默认CSP(cryptograhic存储提供程序)存储用户特定的内容的%AppData%\ Microsoft \ Crypto,或者针对机器级密钥存储%AllUsersProfile%\ Microsoft \ Crypto。 – sisve 2010-11-16 19:47:02

+1

相当低的水平,但我设法找到了关键(因为它是唯一的)。我试过这个称为KeyPal的工具,但似乎不再有效。感谢迄今为止的帮助:) – Thorarin 2010-11-16 20:30:48