Microsoft.Net中數字簽名技術

出處: http://www.java-asp.net/aspnet/200508/t_17841.html

作者:王海軒  e-mail:[email protected]

      Microsoft.Net中數字簽名技術

南京 王海軒
  本文以Microsoft.Net中創建簽名的CAB文件爲例,說明怎樣創建簽名文件,從而使你的代碼可以安全的在INTERNET上發佈。希望能起到拋轉引玉的作用。
關鍵字數字簽名,ActiveX,CAB
 
一、 Internet安全與數字簽名
對於 Internet 應用程序的開發人員和用戶而言,代碼安全是一個主要問題。有下列風險:惡意的代碼、被篡改的代碼和來自未知站點或作者的代碼。
爲 Internet 開發時有兩種保證安全的基本方法。第一種方法稱爲“沙箱”。在此方法中,應用程序只能訪問一組特定的API,並且被從潛在危險的 API(如文件 I/O,程序可能在此毀壞用戶計算機中的數據)中排除。第二種方法使用數字簽名來實現。此方法對 Internet 稱爲“收縮包裝”。使用私匙/公匙技術驗證和簽名代碼。在代碼運行之前,驗證其數字簽名,確保該代碼的來源是已知的並且經過驗證,並且自簽名後該代碼未被更改過。
在第一種情形中,信任應用程序不會有任何損害,並且信任該應用程序的來源。在第二種情形中,使用數字簽名來驗證真僞。數字簽名是用於識別和提供關於代碼發行者的詳細資料的工業標準。其技術基於標準,包括 RSA 和 X.509。瀏覽器一般允許用戶選擇是否希望下載並運行來源未知的代碼。
本文主要討論第二中情形“數字簽名”。給文件簽名首先要獲得軟件發行證書。爲此,必須向證書頒發機構提出請求。在申請期間,必鬚生成一個密匙對並向證書頒發機構提供標識信息(如名字、地址和公匙)。還必須作出在法律上具有約束力的保證,即保證您不能也不會分發您知道或本應知道含有病毒或將以其他方式惡意損害用戶的計算機或代碼的軟件。
       在本文的例子中,使用Microsoft.Net帶的MAKECERT和CERT2SPC實用工具生成測試的軟件發行證書。當然,對軟件發行是無效的,僅可用於測試代碼簽名。
二、 創建簽名的CAB文件
本例使用Microsoft visual studio .Net 2003開發工具。所以你必須擁有Microsoft visual studio .Net 2002以上版本的環境。
1、  獲得軟件發行證書(測試)
第一步:開始菜單->運行,輸入cmd.exe。打開windows 2000的命令提示符環境窗口。
第二步:輸入CD C:/Program Files/Microsoft Visual Studio .NET 2003/SDK/v1.1/Bin,進入該目錄,用dir命令你可以看到signcode.exe、makecert.exe和cert2spc.exe程序。注意:以上路徑根據你機器Microsoft.Net的安裝路徑不同而異。
第三步:創建用於數字簽名的公鑰和私鑰對,並將其存儲在證書文件中。
輸入makecert -sk WHX  -n "CN=WHX COMPANY" c:/testWHX.cer。
就會在你的C:生成testWHX.cer文件。
     說明:參數-n指定主題的證書名稱。此名稱必須符合 X.500 標準。最簡單的方法是在雙引號中指定此名稱,並加上前綴 CN=;例如,"CN=myName"。注意這裏的CN必須大寫。-sk指定主題的密鑰容器位置,該位置包含私鑰。如果密鑰容器不存在,系統將創建一個。輸入makecert -?可以查看其他參數的用法。
第四步:創建發行者證書 (SPC)。
注意,發行者證書測試工具通過一個或多個 X.509 證書創建發行者證書 (SPC)。Cert2spc.exe 僅用於測試目的。可以從證書頒發機構(如 VeriSign 或 Thawte)獲得有效的 SPC。
輸入命令:cert2spc c:/testWHX.cer c:/testWHX.spc,在C:盤生成證書文件。至此,你已經擁有了僅用於測試的軟件證書。其實,我們開發的程序或ActiveX控件只要僅用於企業內部,完全可以用這種辦法作數字簽名,使你的控件可以在瀏覽器裏自動下載,而不必去專門的證書辦法機構獲得證書。                    
2、  創建CAB文件
CAB文件是一種WINDOWS的標準壓縮格式文件,在網頁上發佈ActiveX的時候經常使用該壓縮格式對文件進行包裝,目的是使文件便於在Internet上傳輸。創建CAB文件的方法有很多,可以在Microsoft visual studio .Net 2003中“創建CAB項目“,也可以用WINDOWS自帶的iexpress.exe(c:/windows/system32目錄下),甚至還有其他的壓縮工具。
下面描述iexpress.exe的使用方法。在開始菜單->運行裏輸入iexpress,按如下圖示操作。
在c:/創建whx.CAB 文件。
也可不使用 CAB 文件而直接簽名 DLL 和 OCX。CAB 文件的優勢在於壓縮,而且如果與 INF 文件一起使用,它可將所有必要的代碼綁定在一起。
3、  簽署文件
在上面打開的dos窗口裏,輸入如下命令:
signcode /spc c:/testWHX.spc /k WHX c:/whx.cab
至此,已經對成功對whx.cab文件簽名。可以查看文件的屬性,查看數字簽名。
4、  嵌入到WEB頁
使用 <OBJECT> 標記將控件嵌入在 Web 頁上。在 <OBJECT> 標記內部,需要爲控件指定三個屬性:
  • ID   控件的名稱
  • CLASSID   控件的 CLSID
  • CODEBASE   控件的下載位置。請注意,CODEBASE 可成功指向許多不同的文件。CODEBASE 可以直接指向 OCX 或 DLL 文件。這裏codeBase可以指向你的web程序的相對URL路徑。如:
<OBJECT id=”dropdownlist1”codeBase="whx.CAB" height="25" width="100" classid="clsid:DD9DA666-8594-11D1-B16A-00C0F0283628" >
                </OBJECT>
三、 結束語
以上舉例說明了在microsoft.net環境中,使用數字簽名工具對Cab文件的簽名過程。同樣也適用於對dll、ocx、exe文件的簽名。筆者在windows xp 、Microsoft visual studio .Net 2003下調試通過。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章