一、 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檔案簽名。可以查看檔案的屬性,查看數位簽章。