当前位置:编程学习 > C#/ASP.NET >>

学习笔记《.NET框架程序设计(修订版)》--第三章 共享程序集 (3)

3.6 延迟签名
1、在开发和测试程序集时,允许访问安全的私有密钥可能会导致私钥泄密,因而,.NET框架支持一种称作延迟签名(delayed signing)的技术,有时也叫局部签名(partial signing)。
延迟签名允许我们只使用公司的公有密钥就可以生成程序集:
a、程序集引用我们的程序集,使用公有密钥允许它们将正确的公有密钥嵌入到AssemblyRef元数据条目中;
b、公有密钥生成的程序集还允许被放在GAC的内部结构中;
c、但用公有密钥生成的程序集因为没有经过散列转换也没有在文件中嵌入数字签名,将失去篡改保护功能。
2、实现延迟签名:
a、将公司的公有密钥存放在一个文件中,然后将该文件名传递给程序集生成工具(3.2中的2有详细讲述);
b、将下面的两个特性加到源代码中告诉生成工具对程序集进行延迟签名:
[assembly:AssemblyKeyFile(“MyCompanyPublicKey.keys”)]
[assembly:AssemblyDelySign(true)]
如果使用AL.exe工具,还可以在命令行中指定 /keyf[ile]和 /delay[sign]开关来实现;
c、将程序集安装到GAC,必须通过给 SN.exe 工具指定 -Vr 命令行开关阻止系统对程序集进行完整性验证。这样还可以使CLR在运行时加载程序集的时候,跳过对其内任何文件的散列值的检查:
SN.exe -Vr MyAssembly.dll;
d、完成开发和测试后,打包和部署程序集时需要用SN.exe 的 -r 命令行开关使用私有密钥对程序集进行签名,用SN.exe的 -Vu 或 -Vx 命令行开关恢复对程序集的验证过程:
SN -Vu MyAssembly.dll
3、一些组织将它们的密钥对保存在一个硬件设备中,一些加密服务商(CSP)为抽象这些密钥的位置提供了某些“容器”。
如果我们的公钥/私钥保存在一个CSP容器里,则应该使用 System.Reflection.AssemblyKeyNameAttribute 特性或者 AL.exe 的 /keyn[ame] 命令行开关;而当使用SN.exe将私有密钥添加到延迟签名的程序集商时,则用 -Rc 命令行开关代替 -R 。
补充:asp.net教程,基础入门
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,