snk 与代码签名证书

Posted

技术标签:

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

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

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

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

【问题讨论】:

相关帖子 - .NET: Strong naming vs. Authenticode 【参考方案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)。

以上是关于snk 与代码签名证书的主要内容,如果未能解决你的问题,请参考以下文章

Java 代码签名证书是不是与 SSL 证书相同?

如何从 pfx / cer 创建 snk?

什么是代码签名证书?代码签名证书的功能和优点

SSL证书代码签名证书文档签名证书及邮件签名证书有什么区别

SSL安全证书中的代码签名证书

怎么在windows上openssl颁发代码签名证书?