snk与代码签名证书

Yar*_*veh 20 c# strongname code-signing certificate x509

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

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

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

Dav*_*sky 23

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

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

  • 我会说使用snk签名可以确保不会被篡改(通过哈希检查),而使用pfx进行签名可以确保代码确实来自给定的源(在购买证书时由Verisign验证).此外(我可能在这里错了),我认为与pfx签约使得与snk的签名变得多余. (7认同)
  • 这是对我之前对pfx的评论的确认,产生了snk功能的超集:http://blogs.msdn.com/b/shawnfa/archive/2006/02/14/531921.aspx (4认同)
  • @DaveSwersky:这个答案并不完全正确.PFX只是SNK的密码保护版本.这意味着可以重新分发PFX文件,但对没有密码的伪造者没用.如果SNK或PFX文件仅保留在开发人员手中,那么它们同样是"安全的".如果SNK被重新分配,它的"无篡改"保证无效,尽管它保留了唯一标识的好处,如您所提到的(也可以放入GAC). (4认同)
  • 根本区别在于SNK签名由个人完成,并支持向GAC添加程序集.代码签名由受信任的绑定第三方调解,与SSL一样.保留私钥并由Verisign公布公钥(在您的情况下).在任何一种情况下,程序集都使用私钥"签名"并使用公钥进行验证. (3认同)