标签: strongname

使用强名称签署DLL的好处

我有一个包含多个c#类库的ac#解决方案.我最近正在做一些研究,建议我的库中输出的程序集应该签名,并使用强名称签名.首先,我想知道我是否最好进步?从这些类库输出的库用于多个其他项目.

如果从我之前的问题建议我是的,我应该签署我的dll,我使用的.snk,这可以用于解决方案中的每个类库吗?或者每个类库必须是一键吗?

c# strongname assemblies .net-assembly assembly-signing

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

在两个Visual Studio实例中使用签名依赖项,一个提升/管理员,一个正常

我正在运行Visual Studio 2012并在单独的解决方案中编写后端Web服务和桌面软件.由于桌面软件需要升级("作为管理员"),我需要在提升的Visual Studio实例中运行桌面解决方案.两种解决方案都包含签名库项目.

当我在Visual Studio实例中打开Web服务解决方案而不提升它时,我得到一个类似的构建错误

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

当我尝试通过这样做来解决这个问题时,它会失败并显示一条错误消息,指出密钥已经存在.

当我尝试排除然后重新包含PFX文件时没有把事情做对,但是在项目属性→登录空白时使"强名称密钥文件"下拉列表.接下来,Web服务解决方案构建,但似乎库没有签名,因为在(提升的)桌面解决方案中,构建失败,"程序集生成失败 - 引用程序集'编辑'没有强名称".

如果我尝试从Web服务解决方案中的下拉列表中再次选择PFX文件(并重新输入密码),我会得到:

导入密钥时出错
尝试引用不存在的令牌

从(提升的)桌面解决方案设置PFX文件可以正常工作,但会将我返回到正方形.

看起来,根据高程,Visual Studio会在不同的密钥库中查找可以解锁PFX的任何内容.我是否必须运行两个提升的Visual Studio实例来解决问题,或者我可以以某种方式告诉它在同一个地方查看?

.net strongname code-signing visual-studio-2012

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

如何从强名称主机中使用ServiceStack?

我有一个需要强名称的代码库.

起初,我认为这将是一个简单的修复,因为我只是为我需要的ServiceStack程序集分配了强名称.由于ServiceStack中弱命名程序集之间存在依赖关系,因此失败.然后,我咬了一下子弹并使用我的密钥文件重新编译了ServiceStack - 这是不可取的,因为我没有看到可以在一个位置完成此操作并且必须将其添加到每个项目的方法.

即使这样,解决方案也无法通过测试构建:

[assembly: InternalsVisibleTo("ServiceStack.Common.Tests")]
Run Code Online (Sandbox Code Playgroud)

我发现自己处于一个下降的螺旋状态,不得不调整一些东西让它们工作,并使我自己越来越远离源库我想继续更新.

我该如何处理这个问题?我不喜欢这个地方......

c# strongname servicestack

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

您是否强烈命名您的产品使用的所有组件?

我的产品有大约10个以上的组件.我们曾经在没有强烈命名组件的情况下发货.但在阅读了强有力的命名之后,我认为强名称组合是一个明智的想法.只是想知道一个最佳实践强名称程序使用的所有程序集?

有什么想法吗?

.net strongname assemblies

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

管理开源项目的强名称密钥对的推荐方法是什么?

我管理一个开源项目,并希望签署项目二进制包中发布的二进制文件.我使用Visual Studio csprojsln文件来管理和构建我的项目,并将这些文件作为项目源包的一部分进行分发.

如何签署生成的二进制文件而不必分发snk密钥对文件?如果我使用Visual Studio对程序集进行签名,则每个项目文件现在都需要密钥对的副本才能构建.即使密码保护,我也不习惯分发密钥对.

编辑:

另一个需要注意的是,项目中的某些程序集InternalsVisibleToAttribute通过项目引用授予朋友访问权限,并构建这些朋友.因此,在引用签名的程序集时,此类程序集需要使用强名称.但是,如果密钥对未分发,那么最终用户如何构建源并维护项目关系?如果使用临时密钥对文件,签名程序集的公钥标记是否会更改,从而破坏InternalsVisibleToAttribute引用?

c# strongname open-source assembly-signing visual-studio

7
推荐指数
3
解决办法
2698
查看次数

如何从GAC引用程序集?

我已将强名称程序集安装TestReflection到GAC中(我使用的是.NET 4.0和VS 2010).

不同版本的TestReflectionDLL在.NET 4.0(C:\WINDOWS\Microsoft.NET\assembly\GAC_32\TestReflection\)的GAC中,但是,程序集不会出现在VS 2010的"项目" - >"添加引用"框中.

如何在设计时从另一个项目中引用部署在GAC中的我的程序集?

这个页面说:

您无法添加全局程序集缓存(GAC)中的引用,因为它严格地是运行时环境的一部分.

参考这个声明,我想知道如果需要,如何为其他消费者制作项目的DLL共享程序集?

strongname gac reference .net-4.0 visual-studio-2010

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

如何使用.net库生成强命名SNK密钥文件

我的产品需要能够生成.snk文件(不需要在系统上安装Microsoft SDK).我可以生成一个工作的SNK文件,但是在指定密码时我似乎无法使其工作.谁能给我一些指示?这是我到目前为止:

    internal static void CreateKeyPairFile(string fileName, int keySize, string password)
    {
        if ((keySize % 8) != 0)
        {
            throw new CryptographicException("Invalid key size. Valid size is 384 to 16384 mod 8.  Default 1024.");
        }

        CspParameters parms = new CspParameters();
        parms.KeyNumber = 2;
        if (null != password)
        {
            var passwordString = new System.Security.SecureString();

            foreach (char c in password)
            {
                passwordString.AppendChar(c);
            }
            parms.Flags = CspProviderFlags.UseUserProtectedKey;
            parms.KeyPassword = passwordString;
        }
        RSACryptoServiceProvider provider = new RSACryptoServiceProvider(keySize, parms);

        byte[] array = provider.ExportCspBlob(!provider.PublicOnly);

        using (FileStream …
Run Code Online (Sandbox Code Playgroud)

c# strongname cryptography snk

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

.snk文件的位置和管理

我目前正在设置我的.net库,使用强类型键进行签名.我正在使用.snk文件在每个解决方案的基础上签署我的dll.因此,对于每个解决方案,它都有自己的.snk文件.这是正确的做法吗?例如,我有一个类库,它从解决方案中的每个项目输出几个不同的dll,每个都使用.snk键进行签名.

我的问题围绕着源控件中密钥的存储.当我为每个版本分支我的代码时.应该关键:

A.存在于分支之外而不是分支 - 确保每个分支的相同密钥B.存在于分支内但对于每个分支是相同的C.存在于分支内并且针对每个分支进行更改D.其他(请注明)

建议好吗?

也可以通过将以下内容放在SolutionInfo文件中来签署dll,或者有其他选择吗?

[assembly: AssemblyKeyFile("<<absolute path>>\\MyKey.snk")]
Run Code Online (Sandbox Code Playgroud)

c# strongname assemblies snk .net-assembly

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

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

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

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

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

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

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

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

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

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

obfuscation strongname .net-security strong-named-key

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

在.NET中使用强名称程序集确保代码没有被篡改?

我试图理解.NET中强命名程序集的意义.在谷歌上搜索它时,我注意到它无处不在,它确保代码来自我并且没有被篡改.所以我测试了它.我创建了一个简单的DLL,用新创建的PFX密钥对其进行签名,并由我的WPF应用程序引用它.好吧,一切正常.当我用另一个PFX文件编译DLL时,我收到一个错误,所以没关系.

但是,当我通过ildasm反编译DLL时,修改它并通过ilasm重新编译它,WPF应用程序仍然可以正常工作而没有任何错误.因此,我篡改了强名称的DLL并使用旧的DLL手动更改它,应用程序仍然可以使用被篡改的DLL.PublicKeyToken是一样的.那么强命名的意义何在?它不能确保代码没有被篡改,因为我强烈命名它.

.net c# strongname signing pfx

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