數字證書製做及程序集簽名

首先製做本身的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 程序集永遠是你發行的那個程序集。加密

相關文章
相關標籤/搜索