数字证书制做及程序集签名

首先制做本身的pfx数字证书

1) 下载附件TestProjectpfx.rar解压后获得3个exe文件,1个bat文件。算法

2) 用文本编辑器打开makeTestpfx.bat文件:windows

makecert -r -n "CN=Enterprise Name" -b 01/01/2009 -e 01/01/2011 -sv TestPrj.pvk TestPrj.cer缓存

cert2spc TestPrj.cer TestPrj.spc安全

pvkimprt -pfx TestPrj.spc TestPrj.pvk服务器

将"CN=Enterprise Name"中的Enterprise Name换成本身的公司名称,后面是证书有效起止日期,再后面就是要制做生成的证书名称,有TestPrj.pvk TestPrj.cer TestPrj.spc 三种,须要更名字的话就把这些TestPrj替换掉就能够。编辑器

3) 在控制台中执行makeTestpfx.bat文件,会首先弹出输入私钥密码对话框,输入密码2次点Ok,或者不输入密码直接点None;接着会弹出导出证书对话框,直接Next,而后选择导出私钥,下一步默认导出pfx证书,下一步输入密码(WindowsXP中能够不输入密码,而Vista和Windows7中必须输入密码),而后保存该pfx文件,证书导成功。工具

 

 

 先利用SN.exe这个工具生成一个密匙文件aspnetpager.snk,这个文件的英文原文叫string name key file,而后用加密的算法根据aspnetpager.snk生成一个aspnetpagerPublic.snk.最后在根据 aspnetpagerPublic.snk提取一个public key token ,public key token是一个16位的数字和字母混合的数:大体流程以下:

    aspnetpager.snk --根据必定的算法--> aspnetpagerPublic.snk---->public key token 
因此咱们只要aspnetpager.snk和public key token就能够了,aspnetpagerPublic.snk就没什么用了.由于aspnetpagerPublic.snk的贡献作完了.

实际操做以下: 
1.打开SDK Command Prompt或者VS2005中的Visual Studio 2005 Command Prompt.而不是windows的cmd 
2.输入sn -k aspnetpager.snk,获得的文件在命令提示符的当前文件夹下
3.输入sn -p aspnetpager.snk aspnetpagerPublic.snk (从aspnetpager.snk中提取公匙存入aspnetpagerPublic.snk文件)
4.输入sn -t aspnetpagerPublic.snk 获得public key token

打开VS2005,找到项目,而后右击"项目名"找到"属性","属性"里面有个"Signing"(签名)的选项卡,而后钩上 "Sign the assembly"(为程序集签名),再Choose a strong name key file(选择强名称密钥文件).作完了操做,而后记得保存,编译这样你的DLL才能拖到GAC,GAC就是"全局程序集缓存",这就是为何你的你的项目的bin文件夹下没有System.Data,你都能引用的缘由,由于程序会自动去找GAC,GAC的位置在win 2003中是"c:\windows\assembly".开发工具

 

对程序集签名,也常常称为对程序集赋予一个强名称。

强名称是由程序集的标识加上公钥和数字签名组成的。其中,程序集的标识包括简单文本名称、版本号和区域性信息(若是提供的话)。强名称是使用相应的私钥,经过程序集文件(包含程序集清单的文件,并于是也包含构成该程序集的全部文件的名称和散列)生成的。Microsoft® Visual Studio® .NET 和在 .NET Framework SDK 中提供的其余开发工具可以将强名称分配给一个程序集。强名称相同的程序集应该是相同的。

经过签发具备强名称的程序集,您能够确保名称的全局惟一性。强名称还特别知足如下要求: 

1.> 强名称依赖于惟一的密钥对来确保名称的惟一性。任何人都不会生成与您生成的相同的程序集名称,由于用一个私钥生成的程序集的名称与用其余私钥生成的程序集的名称不相同。

2.> 强名称保护程序集的版本沿袭。强名称能够确保没有人可以生成您的程序集的后续版本。用户能够确信,他们所加载的程序集的版本出自建立该版本(应用程序是用该版本生成的)的同一个发行者。

3.> 强名称提供可靠的完整性检查。经过 .NET Framework 安全检查后,便可确信程序集的内容在生成后未被更改过。但请注意,强名称中或强名称自己并不暗含信任级别,例如由数字签名和支持证书提供的信任。

在引用具备强名称的程序集时,您应该可以从中受益,例如版本控制和命名保护。若是此具备强名称的程序集之后引用了具备简单名称的程序集(后者没有这些好处),则您将失去使用具备强名称的程序集所带来的好处,并依旧会产生 DLL 冲突。所以,具备强名称的程序集只能引用其余具备强名称的程序集。


也就是说,强名称程序集(程序集签名)能够确保你的应用程序加载的程序集是彻底正确的,是彻底是你指望的那个程序集,绝对不可能被替换掉的。

假设,你一个 C/S 系统中,客户端程序依赖一个 A 程序集,这个程序集提供一个将登陆账号和密码发送到服务器进行验证的方法 M。若是程序集 A 被替换掉,那么,客户端的密码就可能被截取(更改后的方法 A 在发送以前先发送到黑客的服务器上),也有可能客户端根本就不执行验证直接就经过验证(更改后的方法 A 不执行任何操做直接返回 true)。因此你想一想若是不使用强名称程序集(程序集签名)后果多可怕。一旦使用了强名称程序集(程序集签名),那么 A 程序集永远是你发行的那个程序集。加密

相关文章
相关标签/搜索