标签: strong-named-key

强名称sn.exe:无法安装密钥对 - 对象已存在

我的机器上有两个不同版本的同一个项目.一个来自代码中继,另一个来自代码分支.这些项目使用.pfx键来启用强命名.当我第一次尝试编译项目的trunk版本时,我收到以下错误:

无法导入以下密钥文件:sgKey.pfx.密钥文件可能受密码保护.要更正此问题,请尝试再次导入证书,或使用以下密钥容器名称手动将证书安装到强名称CSP:VS_KEY_45891C38BC1BB345

要解决此问题,我使用sn.exe和以下命令:

sn -i sg Key.pfx VS_KEY_45891C38BC1BB345

这解决了trunk项目的问题,然后愉快地构建.

但是,当我尝试构建项目的分支版本时,我收到相同的初始错误(具有相同的密钥容器名称),当我尝试使用sn.exe安装证书时(不出意外)给出以下错误:

无法安装密钥对 - 对象已存在

这是有道理的,因为我在sn命令上使用了相同的infile容器,但我想要了解的是:

  1. 如果此对象已存在,为什么项目无法构建,因为看起来已经安装了证书.
  2. 我如何解决这个问题(例如,我可以卸载然后重新安装吗?如果是这样,怎么做?)

.net certificate duplicates sn.exe strong-named-key

29
推荐指数
2
解决办法
1万
查看次数

枚举强名称CSP的容器名称

我正在尝试找到一些有关如何(如果可能的话)枚举强名称CSP(加密服务提供程序)中的所有容器名称的信息.

实质上,当您键入时sn.exe -i key.snk MyContainerName,公钥和私钥对存储在所谓的"容器"中.稍后,在您的代码中,您可以指定容器名称AssemblyKeyNameAttribute,例如:

[assembly: AssemblyKeyName("MyContainerName")]
Run Code Online (Sandbox Code Playgroud)

这将导致程序集在编译时签名.

我试图找出是否有可能以某种方式枚举所有容器名称.我正在为ReSharper编写一个插件,InternalsVisibleTo属性提供代码完成.我还想为AssemblyKeyName属性提供代码完成,我将使用已知的容器名称预先填充列表.

这些信息是否可访问?

编辑:从IT Security StackExchange 对这个问题的评论中,有一个名为KeyPal的小工具的链接.运行此实用程序LM将转储本地计算机密钥存储区:

--------- KeyPal:  MACHINE store: 3 keycontainers ---------
[0] VS_KEY_F726FDF898BC4CB8
     Signature 1024
[1] IIS Express Development Certificate Container
     Exchange  1024
     CertE: CN=localhost
[2] MyContainerName
     Signature 1024
-------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我可以看到[0]和[2]都是有效的容器名称AssemblyKeyName.但是,有[1]一个 - "IIS Express ...",它不是一个有效的容器.我如何区分它们?

.net strong-named-key

12
推荐指数
1
解决办法
2326
查看次数

创建新的密钥文件来强命名程序集在 Visual Studio 2022 中不起作用

我使用的是 Visual Studio 2022 v17.0.4。我想为我的程序集创建新密钥以对其进行强命名。根据文档:“在选择强名称密钥文件框中,选择浏览,然后导航到密钥文件。要创建新的密钥文件,请选择新建并在创建强名称密钥对话框中输入其名称”。文档

找不到“新建”按钮。 这是图像 1

在旧的 Visual studio 中这很容易,但在新的 VS2022 中找不到 NEW 按钮。 这是图像 2

请帮忙!

c# .net-assembly strong-named-key visual-studio-2022

10
推荐指数
1
解决办法
4098
查看次数

阻止某人加载托管程序集的最简单方法是什么?

.Net安全noob在这里...防止其他人加载我的程序集的最简单方法是什么?

背景:虽然我真的在寻找'足够好'的保护(有足够的时间/金钱/智能,有人可以成功破解,破解和攻击),这似乎应该已经解决了问题,我只是想念它.

这是我(我想)我知道的:

  1. 虽然强大的命名可以用作安全层,但根据这个微软文档,它并不一定是有意的(参见警告:不要依赖强名称来保证安全性.它们只提供唯一的身份.)

    在那个^注意我遇到了我无法加载第三方组件的情况(Aspose我认为它是)因为他们没有签署他们的集会,但是我的全部都是.所以我不得不ildasm他们的集会,用我们自己的snk签名,然后ilasm回来),以便使用他们的库.因此,强大的命名对我来说似乎不是一个好的安全机制. 但是 ......在代码中进行简单检查以验证调用程序集是否使用我的公钥令牌?这有效吗?

  2. 如果强大的命名不应该用于我想要完成的任务,那么在dll上实现Authenticode数字签名检查路径越好(看起来wintrust.dll可以帮助解决这个问题)?

    我一直在经历几个供应商的混淆工具,很多都带有许可和各种东西.我可能会使用一些混淆来隐藏一些敏感部分,但是我仍然希望有一种机制来阻止某人加载我的敏感库,而不必使用字符串和代码加密等功能,这通常会带来性能(和其他)成本.

回到这个问题,阻止某人加载我的程序集的最简单方法是什么?

obfuscation strongname .net-security strong-named-key

7
推荐指数
1
解决办法
517
查看次数

在AfterBuild事件中访问强名称密钥(pfk)密码

如果强名称使用受密码保护的pfk签署程序集,是否可以访问AfterBuild节点中用于密钥的密码?

msbuild visual-studio strong-named-key

5
推荐指数
1
解决办法
216
查看次数

StrongName无法访问原始密钥文件的.NET程序集

我对现有的.NET程序集dll中的代码进行了一些更改.我没有用于签署代码的密钥文件.如何在不删除StrongNames(Damages应用程序)的情况下强制.NET可执行文件加载它,而无需注册它以跳过验证(不可移植)?

.net c# strongname strong-named-key

4
推荐指数
1
解决办法
5769
查看次数

创建证书签名请求

我知道这可能是一个简单的问题,但我开始迷路了。我用于为强名称(在 Visual Studio 项目属性中)签署程序集的私钥是否与生成 CSR 相关/需要?

.net c# strong-named-key

1
推荐指数
1
解决办法
5014
查看次数