程序集的延迟签名使用

延迟签名允许我们只使用公司的公有密钥就可以生产程序集,不再需要私有密钥,这种用公有密钥生产的程序集还被允许放在GAC的内部结构中。如果没有用私有密钥对这些文件签名,它们将失去篡改保护功能,因为程序集文件没有经过散列转换,也没有在文件中嵌入数字签名。但是,失去保护不应该成为一个问题,因为我们是在开发程序集,而不是在打包或部署。

使用延迟签名一般使用如下技巧:

1. 当开发程序集时,首先取得仅包含公司公有密钥的文件,并将下面两个特性加到源代码中:

[assembly:AssemblyKeyFile(“MyCompanyPublicKey.keys”)]

[assembly:AssemblyDelaySign(true)]

这将告诉生成工具,我们希望对程序集进行延迟签名,也就是说我们不再提供私有密钥。

当编译器或者AL.exe检测到我们正在对程序集进行延迟签名时,它会为该程序集产生一个AssemblyDef清单条目并将程序集的公有密钥包含在其中。另外,公有密钥的存在也允许我们将程序集放在GAC中。我们还可以生成引用这些程序集的其它程序集,引用程序集将在其AssemblyRef元数据表的条目中包含正确的公有密钥。当生成最终的程序集时,得到的PE文件中将会为RSA数字签名留出一定的空间(一些使用工具可以根据公有密钥的大小判断出需要的空间)。

2.生成程序集后,如果试图直接向GAC安装程序集将会失败,因为文件内容还没有经过散列转换(相当于文件被篡改),为了将程序集安装到GAC中,我们必须阻止系统对程序集进行完整性验证。执行下面的命令以便后面跳过对其内任何文件的散列值的检查,将该程序集安装到GAC中,或者生成引用该程序集的其它程序集,以及测试该程序集。注意该操作只能执行一次,没有必要每次生成程序集时都执行一遍。

SN.exe -Vr MyAssembly.dll

3.一旦完成开发和测试,我们就需要正式地为程序集进行签名以实施打包盒部署。当准备打包盒部署程序集时,取得公司的公钥/私钥对,然后执行下面的命令:

SN.exe -R MyAssembly.dll MyCompany.keys

该命令行开关-R会使SN.exe对文件内容进行散列转换,并以私有密钥进行签名,然后将RSA数字签名嵌入到文件中原来预留出的空间。

4.执行下面的命令,恢复验证过程:

SN.exe -Vu MyAssmbly.dll
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值