vs自帶工具進行代碼數字簽名方法

數字簽名(代碼簽名)流程 【轉自:http://blog.csdn.net/ghevinn/article/details/8021389


Authenticode : 這裏翻譯爲數字認證代碼。 
code sign : 字面的翻譯爲代碼簽名,但是通常的我們稱爲數字簽名,以下的文中均稱爲數字簽名。



一 數字認證碼
如果你是軟件開發人員,你可能已經知道windows系統一些瀏覽器(例如IE,Firefox)使用一種稱爲數字認證代碼的技術來標識軟件的發行商,來檢查軟件沒有被病毒影響。如果你的軟件沒有用數字認證代碼簽名,用戶將會收到一個警告“此軟件發行商不能被成功驗證,你是否要繼續運行此軟件“,很多的用戶爲了安全起見將放棄對此軟件的使用。

如果你的軟件是提供給專業的人員使用,結果肯能會更糟。許多公司IT安全策略禁止沒有用數字認證碼簽名的軟件的運行。

同時微軟Windows也使用數字簽名證書來判斷潛在的惡意軟件。如果你的setup.exe沒有進行數字認證證書的簽名,你的軟件的名譽將遭受損害。

在Vista系統增加UAC之後,情況變的更糟,如果你的軟件沒有使用數字認證證書籤名,且在運行時需要管理員的權限,則會出現警告對話框”不可識別的程序想訪問你的計算機“,這個時候很多的用戶可能認爲是病毒,會禁止使用你的軟件。

二 數字認證碼的原理

數字簽名代碼是一種技術,它使用數字證書來識別軟件的發佈商和使用hash算法來確保軟件的完整性。數字簽名使用公共密匙簽名書法被創建,它使用兩種不同的密匙:公共密匙和私有密匙,我們稱其爲密匙對。私有密匙一般爲擁有者所有,公有密匙對所有的人都可見。


數字簽名的過程本質上爲:

簽名軟件對要簽名的軟件創建hash;

使用發佈者的私有密匙來加密軟件的hash;

被加密的hash和發佈者的數字證書被插入到要簽名的軟件;


數字簽名的驗證過程本質上爲:

用戶對要驗證的軟件創建hash;

使用發佈者的公共密匙來解密被加密的hash;

比較解密的hash和新獲得的hash,如果匹配說明簽名是正確的,軟件沒有被修改過;


三 數字簽名
數字簽名是對軟件進行標識的一個流程,它通過對軟件增加了發佈商的信息來檢查軟件在發佈後是否被修改或受病毒影響。在軟件出售前進行簽名已經成爲了行業範圍的專業實踐。隨着用戶的安全意識的提高,現在越來越多的用戶限制下載未簽名的軟件,因此作爲專業的軟件公司,在軟件出售前進行簽名已經成爲必不可少的一步。

要進行數字簽名,需要以下準備:
1)數字證書和密碼;
2)數字簽名工具
3)時間戳服務器URL地址


四 數字簽名工具
數字簽名工具, 微軟提供了兩套數字簽名工具,

1)signcode.exe, 從1998年開始使用,隨.NET Framework SDK發佈。

signcode.exe 數字簽名工具

makecert.exe 創建數字證書

cert2spc.exe 將數字證書轉化爲軟件發佈者證書格式


2)signtool.exe,隨visualstudio 2005及其以後的版本發佈。

signtool.exe 數字簽名工具

makecert.exe 創建數字證書

cert2spc.exe 將數字證書轉化爲軟件發佈者證書格式

pvk2pfx.exe(pvkimprt.exe) 將私有的密匙和軟件發佈者證書合併爲pfx文件,此文件將被signtool.exe使用


上面2中工具的不同是signcode.exe需要輸入私有密匙和軟件發佈者證書(pvk和spc文件),signtool.exe只需要輸入由pvk和spc合併產生的一個個人信息交互文件(pfx)。


五 獲得數字證書

數字證書,你可以創建自己的數字證書來測試數字簽名的流程,但是正式的軟件發佈,你需要向可信賴的證書頒發機構購買數字證書和密碼,例如你可以向以下的證書機構購買Comodo, Globalsign, Thawte and Verisign。


創建自己的數字證書(用來測試)

使用如下命令來創建自己的數字證書:
makecert.exe -sv mykey.pvk -n "CN=Acme Software Inc." mycert.cer你可以將Acme Software Inc.替換爲你自己公司的名字。如果mykey.pvk不存在的話,你會要求輸入私有密匙的密碼,密碼可以爲空。安全起見最好設置密碼,否則別人拿到你的私有密匙後就可以簽名了。在上面的命令後,產生了2個文件mykey.pvk和mycert.cer。接下來需要將數字證書(cer)轉化爲軟件發佈商證書(spc),命令如下:cert2spc.exe mycert.cer mycert.spc此過程中需要輸入私有密匙的密碼,創建完成後應該會生成mycert.spc文件,當數字簽名時mycert.cer文件是不需要的。 

六 對軟件數字簽名 
時間戳服務器,你可以選擇下列之一,
- http://timestamp.verisign.com/scripts/timstamp.dll
- http://timestamp.globalsign.com/scripts/timstamp.dll
- http://timestamp.comodoca.com/authenticode


1)使用signcode.exe,如下:
signcode.exe -t <timestamp URL> -spc mycert.spc -v mykey.pvk "<file to be signed>"進行數字簽名的文件可以是.exe, .dll, .ocx 或者是其他的可執行文件。

2)使用signtool.exe,如下:

如果你沒有pfx文件,需要使用以下的命令來將pvk和spc文件合併爲pfx,如果沒有設置密碼的話必須使用pvkimprt.exe來合併。pvk2pfx.exe -pvk mykey.pvk -pi <password> -spc mycert.spc -pfx mycert.pfx -po <password>pvkimprt.exe -pfx mycert.spc mycert.pvksigntool.exe sign /f mycert.pfx /p <password> /t <timestamp URL> /v "<file to be signed>" 
以下是使用signtool.exe簽名的一個實例:
signtool.exe sign /f mycert.pfx /p <password> /t <timestamp URL> /v "<file to be signed>"

Here is the Sample Output:
The following certificate was selected:
Issued to: SID Software Inc.
Issued by: Thawte Code Signing CA
Expires: 10/16/2011 2:17:15 AM
SHA1 hash: 4374SD894388B9H456E206124G06D9AV1535G12E

Done Adding Additional Store

Attempting to sign: jservice.exe
Successfully signed and timestamped: jservice.exe

Number of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0

參考:
http://www.tech-pro.net/code-signing-for-developers.html
http://siddesh-bg.blogspot.com/2008/12/code-signing-process.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章