【问题标题】:snk vs. code signing certificatesnk 与代码签名证书
【发布时间】:2011-04-02 07:24:32
【问题描述】:

在我的组织中,我们使用具有强名称程序集的 snk 文件。我们自己生成 snk。

此外,我们在二进制文件上使用代码签名签名。我们从 Verisign 获得 pfx。

  • 这两个过程有什么区别?
  • snk 也没有从 Verisign 收到不是问题吗?

【问题讨论】:

标签: c# certificate code-signing strongname x509


【解决方案1】:

snk 和 pfx 用于两个不同的目的。 snk 用于强命名,它使用密钥对来唯一标识程序集。 pfx 用于代码签名,这是一个类似的过程,但旨在防止恶意篡改公开分发的程序集。在程序集上同时使用强名称和签名。

只要保证私钥安全,就可以生成自己的 SNK 文件。您从 Verisign 获得的 PFX 文件允许您使用由第三方保护的密钥对程序集进行签名。这是一个额外的安全层,让您的程序集的用户知道它没有被篡改。

【讨论】:

  • 所以 snk 只是将私钥-公钥对绑定到程序集,而不考虑密钥所有者身份,以便允许强引用?这意味着如果我(用户)信任 exe,我可以信任所有引用。我将如何信任 exe,它是代码签名的地方吗?在这种情况下,我应该只签署 exe 而不是其他程序集,因为我知道它们没有被篡改。这是正确的吗?
  • 根本区别在于 SNK 签名由个人完成,并且支持向 GAC 添加程序集。与 SSL 一样,代码签名由受信任的、有约束力的第三方调解。私钥由 Verisign 持有,公钥由 Verisign 发布(在您的情况下)。在任何一种情况下,程序集都使用私钥“签名”并使用公钥验证。
  • 我会说使用 snk 签名可以确保不会被篡改(通过哈希检查),而使用 pfx 签名可以确保代码确实来自给定的来源(由 Verisign 验证购买证书时)。此外(我在这里可能错了),我认为用 pfx 签名使得用 snk 签名是多余的。
  • 这是对我之前对 pfx 产生 snk 功能超集的评论的确认:blogs.msdn.com/b/shawnfa/archive/2006/02/14/531921.aspx
  • @DaveSwersky:这个答案并不完全正确。 PFX 只是 SNK 的受密码保护的版本。这意味着 PFX 文件可以重新分发,但对没有密码的伪造者没有用。如果 SNK 或 PFX 文件只保存在开发人员手中,那么它们同样“安全”。如果重新分配 SNK,则它的“不可篡改”保证将失效,尽​​管它保留了唯一标识的好处,正如您所提到的(也可以放入 GAC)。
猜你喜欢
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
  • 2010-09-09
  • 2013-10-10
  • 2014-01-25
  • 2014-03-24
  • 2015-10-19
  • 2010-09-20
相关资源
最近更新 更多