.NET程序集签名
强命名程序集的一个好处是防篡改。假如我有一个程序集MyDll.dll,如果我用我自己的私钥进行签名将程序集中的内容进行哈希处理,其他人如果不知道我的私钥的话,就不能篡改我的这个程序集进行某些恶意的行为。
但对于一些大型程序的开发,私钥一般是不公开的,当然,与它匹配的公钥是公开的,可以自由分发。那么如何确保开发人员在开发的过程中使用强命名程序集(如希望将其放到GAC中,因此必然得是强命名程序集)。延迟签名就是为此目的。
仍以MyDll.dl为例:
1)生成公钥/私钥对
sn -k Company.snk
2)提取出公钥,而将私钥另外进行妥善保管
sn -p Company.snk public.snk
3)对程序集进行延迟签名
csc /keyfile:public.snk /delaysign /t:library MyDll.cs
4)让CLR信任程序集的内容,不执行哈希处理
sn -Vr MyDll.dll
由于上面的命名会在注册表中添加相应项,因此对同一程序集只需执行一次。
这样,MyDll.dll就可以安装到GAC中(如果你愿意的话)
5)其他开发人员可以引用此程序集,就好像一般的强命名程序集一样
6)假如开发完成要进行最终部署的话,一定要用私钥进行签名。
否则,有人完全可以用这个公钥来做一个相同的程序集来替换掉你的这个程序集来做些坏事。
总之,程序集的安全会大打折扣。为此,让保管私钥的人来完成如下签名
sn -R MyDll.dll Company.snk
注:我们不能单独提取出私钥,私钥和公钥是在一个文件中。公钥可以单独提取出来,以便于分发。
7)打开验证,在4)中的注册表项会被相应移除
sn -Vu MyDll.dll
其他介绍:
http://www.cnblogs.com/cpcpc/archive/2011/01/17/2123086.html
http://www.cnblogs.com/Dot-Boy/archive/2010/04/16/1713719.html
http://www.2cto.com/kf/201007/52822.html
最新文章
- React学习笔记-8-属性和状态详解
- 1Z0-053 争议题目解析470
- Eclipse下无法自动编译,或者WEB-INF/classes目录下没文件,编译失败的解决办法(转载)
- oracle游标调试结果显示位置
- quartz使用案例
- 炮(cannon)
- IOS单例模式(Singleton)
- JSF标签大全详解
- sql 合并列
- English - 英语中的时间表达法,这里全啦!
- java结构与算法之选择排序
- CentOS Linux使用crontab运行定时任务详解
- Mysql删除表格之后,进行恢复
- java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleExcept问题解决方案
- 【模板】cdq分治代替树状数组(单点修改,区间查询)
- 深度理解PHP中for与foreach两个循环结构遍历数组的区别
- golang:iconv
- C++ 是 编程界 的 背锅侠
- 07-OpenLDAP密码审计
- JS函数机制小结