数字签名一个强大的命名.NET程序集

时间:2015-05-08 11:07:44

标签: .net c++-cli digital-signature strongname authenticode

我有一个我强烈命名的.NET程序集,将它放在GAC中。但是,同样的程序集也会在稍后使用.pfx文件进行数字签名,以进行数字签名 我注意到这个双重签名的程序集未通过强名称验证,也没有安装在目标机器的GAC中。

数字签名程序是否可能会删除SN密钥生成的强命名过程?

数字签名是必不可少的,如果2不兼容,那么文件是否可以由.pfx文件签名,就像SN命名过程一样容易?

此外,程序集位于C++/CLI,而不是C#

编辑:查看MSDN Documentation,它说是否使用链接器选项进行强命名,以及使用mt.exe之类的后期处理工具(我不确定是否Signtool.exe属于这些工具之中),大会需要辞职。

另外,这句话:

  

如果在开发环境中构建时使用签名属性,则可以通过在构建后事件中显式调用sn.exe(Sn.exe(强名称工具))来成功签署程序集。

......有点混乱。它引用了哪些属性,CLR属性或Linker选项?

2 个答案:

答案 0 :(得分:2)

它们兼容,应按特定顺序应用:

  1. 强名称(sn.exe)
  2. Authenticode /代码签名/数字签名(signtool.exe)
  3. 我经常这样做,没有任何C#程序集问题。我不知道这对于c ++会有所不同。

    这是有效的,因为强名称哈希码不包含PE头的某些部分,包括authenticode哈希。正如此处here所述。

答案 1 :(得分:0)

我们构建了一些C ++ / CLI程序集。我们使用链接器开关:

  • / KEYFILE - 选择带有公钥的snk文件
  • / DELAYSIGN - 指定延迟签名

然后,在构建后的事件中,我们调用sn.exe来应用测试签名

稍后,就在将程序集包含在合并模块中之前,我们调用:

  • sn.exe - 应用真正的强名称签名
  • signtool.exe - 应用Authenticode签名

您应该能够使用/ KEYFILE指定包含密钥对的snk文件,然后只需调用signtool来执行Authenticode签名。

除非您使用其他一些后期构建工具,否则应该这样做。