我的解决方案中有2个项目:
我在第一个项目中将测试程序集声明为朋友程序集:
[assembly: InternalsVisibleTo ("Company.Product.Tests")]
Run Code Online (Sandbox Code Playgroud)
一切都很好,直到我意识到我忘记设置解决方案来签署我的程序集.因此创建了一个snk文件并设置了visual studio项目来签署第一个程序集(Basic Library).现在当我编译第一个项目时,我收到以下错误:
朋友汇编参考'Company.Product.Tests'无效.强名称签名程序集必须在其InternalsVisibleTo声明中指定公钥.
我试图使用sn实用程序从我的snk文件中提取公钥,但它生成一个有线二进制文件,我不确定如何使用.我该如何解决这个问题?
我维护一个大型WPF应用程序,我从另一个开发人员继承.我使用ClickOnce发布它.突然,今天我收到一条错误消息:错误2无法发布,因为项目无法构建.1 1
错误3签名时出错:无法签署bin\Debug\app.publish\setup.exe.SignTool错误:未找到符合所有给定条件的证书.
我有一个名为SomeName.snk的文件,在项目设置,签名选项卡中引用.我不知道今天发生了什么导致了这个问题.我使用VS 2012.
我想签署DLL的原因是因为我想将它添加到全局程序集缓存中.程序集是一个用Java编写并移植到J#的css解析引擎.我使用VS2008所以我不能制作J#项目.它没有分配给它的强名称密钥,我现在不知道如何构建它.
有人有主意吗?
数字签名与强命名程序集有什么关系.我读到一个强名称的程序集有公钥和数字签名.
"签署程序集涉及对程序集的重要部分进行散列,然后使用私钥加密散列.签名的散列与公钥一起存储在程序集中.公钥将解密签名的散列.当CLR加载一个强命名的程序集,它将从程序集生成一个哈希值,然后将其与解密的哈希值进行比较.如果比较成功,则表示文件中的公钥(以及公钥标记)与私钥相关联用于签署程序集.这意味着程序集中的公钥是程序集发布者的公钥,因此欺骗攻击被挫败."
以上信息准确吗?它没有任何数字签名的参考.我找不到MSDN页面,解释如何签署程序集,如何验证签名以及如何消除黑客攻击的可能性.我想更多地了解这些.
现在我正在设置Linker/Advanced/KeyFile选项.
我收到"mt.exe:一般警告810100b3:是一个强名称签名的程序集,并且嵌入清单会使签名无效.您需要重新签名此文件才能使其成为有效的程序集." .
从网上阅读,听起来我必须设置延迟签名选项,下载SDK,并运行sn.exe作为后期构建事件.当然在VS2010中必须有一种更简单的方法来执行这种常见操作?
我的方案是我们有一个程序(exe),如果在特定文件夹中找到,将启动其他程序.我想确保它只启动使用我们的公司证书(Verisign批准等)签署的计划.从本质上讲,它只会以与自身相同的证书启动程序.我不想发送证书本身.
我一直在搜索网络和系统名称空间,并没有找到一个明确的例子,从文件中读取证书数据并验证它,并可以检查另一个文件.我发现的最接近的是Signtool,并且在单独的exe中进行此验证有点少.我知道强命名的东西不会有帮助,因为数字签名的文件是不同的,如此处有用的解释(http://blog.codingoutloud.com/2010/03/13/three-ways-to-tell-whether-an-assembly- dl-is-strong-named /)SO中的其他一些示例显示了原始数据的加密和验证,但没有以某种方式将它打包在一起的程序集.
任何想法或建议?
在visual studio项目设置中,您可以选择强名称密钥文件来签署程序集.创建新的时,您可以选择使用密码保护它.你应该什么时候这样做?什么时候不应该?
我认为,如果项目是在Codeplex或类似地方托管的开源项目,用密码保护它可能不是那么聪明.还是应该保护它?如果密钥文件受到保护,人们是否无法下载源代码并进行编译?或者,这是如何工作的?
我正在寻找在30多个开发人员,20多个解决方案和60多个项目的组织中应用签名程序集的建议和最佳实践.我们正在使用Visual Studio Team System 2008和TFS.
虽然创建密钥并签署程序集是一个非常简单直接的过程,但我担心如何以最佳方式管理它.
到目前为止我的想法:
我们会遇到这种方法的任何问题吗?
其他一些想法:
欢迎任何意见,好/坏的经验和建议.:)
我正在创建一个入门工具包,它将已编译的程序集从开源项目安装到GAC中,以便更容易地引用模板中的程序集.由于他们将加入GAC,因此需要签署.
我是否需要密码保护并保护密钥文件,或者是否可以将其保持打开并将文件包含在源代码管理中?
我试图在我当前的项目中使用ServiceStack,但发现发布的二进制文件名称不强,所以我无法使用它开箱即用.当询问GitHub"为什么"时,我得到了以下答案:
mythz非常简洁,所以我不想再打扰他,并在这里问.我使用了许多开源.NET项目,如AutoMapper,NUnit,Moq,log4net,Ninject等,他们的版本都是强大的命名.在这里找到类似的问题,但这对我没有帮助.这是OSS的正常做法吗?为什么不发布签名和未签名的二进制文件?
.net open-source code-signing assembly-signing code-signing-certificate
assembly-signing ×10
.net ×5
c# ×4
open-source ×2
asp.net ×1
c++-cli ×1
clickonce ×1
code-signing ×1
dll ×1
gac ×1
wpf ×1