每个人都说使用私钥对程序集进行签名,但是没有人说如何通过使用sn.exe获取私钥意味着-KI可以创建私钥/公钥对,但如何从中提取私钥以对其进行签名
如果我用私钥签署我的程序集,然后将其发送给该程序集的用户,那么他将直接将此程序集添加到全局程序集和使用中,因此需要向他发送公钥以使用此程序集或公钥是使用assemblyl所以任何人都可以使用这个程序集,如果任何人都可以使用加密的含义,它将是私钥。
答案 0 :(得分:21)
我有些困惑
这是一个令人困惑的话题。
如何从中提取私钥?
你不需要。签名工具获取密钥文件。如果需要,它足够聪明地提取私钥。
是否需要向他发送公钥以使用此程序集?
公钥嵌入在程序集中。如果查看程序集的强名称,可以看到它。但是, 必须以某种方式与客户沟通正确的公钥是什么,如果您认为有人可能试图冒充您!有关详细信息,请参阅下一位。
如果有人可以使用私钥加密它的意义吗?
使用私钥对程序集进行签名的目的是生成证据。 证据表示“此程序集是由拥有与此公钥关联的私钥的人生成的。”
例如,Microsoft的公钥令牌是众所周知的。这就是为什么它被称为“公共”密钥:因为它被公众所知。当您看到具有Microsoft公钥的程序集,即Microsoft生成该程序集的证据,因为其签名可以使用Microsoft的公钥解密的程序集必须由具有访问权限的人生成到Microsoft的私钥。这个密钥在雷德蒙德的第七大楼深处严密保护,所以你有充分的证据表明真正在微软工作的人产生了这个组件。
此系统的目的是使人们能够设置策略,将证据转换为权限。您的客户可以制定一项政策,说明“如果我有证据表明此程序集是由Ashish生成的,那么请允许代码执行我允许执行的任何操作”。
现在,您可以合理地询问“客户如何知道给定的公钥是您的公钥?”这就是“关键管理”问题,那就是你的责任。如果你有一个邪恶的双胞胎谁告诉你的客户他的公钥是你的公钥,那么你的客户可能会相信你的邪恶双胞胎,认为他是你。在这种情况下,你的责任教育你的客户,那里有一个邪恶的双胞胎试图欺骗他们,并告诉他们如何分辨善良的Ashish的公钥之间的区别和邪恶双胞胎的公钥。
您还需要确保您的私钥保密。如果你的邪恶双胞胎知道你的私钥,那么显然他们可以随心所欲地冒充你;请记住,签名的程序集提供了证据,证明有权访问私钥的人生成了程序集;如果不止一个人可以访问该密钥,则证据不能识别一个人。
答案 1 :(得分:6)
您不提取私钥来签署程序集。您只需使用包含私钥和公钥的SNK文件(由sn -k
生成)配置要签名的项目。您可以在程序集属性中指定它,但是现在首选方法是在项目选项中指定它(相信csc.exe上的/keyfile
标志,我相信)。
我个人通常不会向GAC添加库 - 我更喜欢将程序集与正在使用它的项目一起保存。但不,你不需要向他发送公钥。
您不是使用私钥加密文件 - 您使用该密钥签名。公钥嵌入在程序集中,基本上你会说,“这个程序集的生产者肯定拥有这个公钥/私钥对,因为你可以验证它是否已使用与此公钥对应的私钥进行签名。”
答案 2 :(得分:1)
您可以使用sn.exe创建密钥,它将创建一个.snk文件。您还可以使用sn.exe和相同的.snk文件对程序集进行签名,无需提取任何内容。在Visual Studio中完成所有操作也非常方便(项目属性,也可以生成和签名)。
不,程序集包含公钥。也许你把它与使用X.509证书的代码签名混淆了。不是那样的。
答案 3 :(得分:0)
我认为这两篇文章告诉你所有你需要知道的事情: