【轉載】http://www.cnblogs.com/itech/archive/2011/07/21/2110924.htmlhtml
Authenticode : 這裏翻譯爲數字認證代碼。
code sign : 字面的翻譯爲代碼簽名,可是一般的咱們稱爲數字簽名,如下的文中均稱爲數字簽名。
一 數字認證碼
若是你是軟件開發人員,你可能已經知道windows系統和一些瀏覽器(例如IE,Firefox)使用一種稱爲數字認證代碼的技術來標識軟件的發行商,來檢查軟件沒有被病毒影響。若是你的軟件沒有用數字認證代碼簽名,用戶將會收到一個警告「此軟件發行商不能被成功的驗證,你是否要繼續運行此軟件「,不少的用戶爲了安全起見將放棄對此軟件的使用。
若是你的軟件是提供給專業的人員使用,結果肯能會更糟。許多公司的IT安全策略禁止沒有用數字認證碼簽名的軟件的運行。
同時微軟Windows也使用數字簽名證書來判斷潛在的惡意軟件。若是你的setup.exe沒有進行數字認證證書的簽名,你的軟件的名譽將遭受損害。
在Vista系統增長UAC以後,狀況變的更糟,若是你的軟件沒有使用數字認證證書籤名,且在運行時須要管理員的權限,則會出現警告對話框」不可識別的程序想訪問你的計算機「,這個時候不少的用戶可能認爲是病毒,會禁止使用你的軟件。
二 數字認證碼的原理算法
數字簽名代碼是一種技術,它使用數字證書來識別軟件的發佈商和使用hash算法來確保軟件的完整性。數字簽名使用公共密匙簽名書法被建立,它使用兩種不一樣的密匙:公共密匙和私有密匙,咱們稱其爲密匙對。私有密匙通常爲擁有者全部,公有密匙對全部的人均可見。windows
數字簽名的過程本質上爲:瀏覽器
簽名軟件對要簽名的軟件建立hash;安全
使用發佈者的私有密匙來加密軟件的hash;服務器
被加密的hash和發佈者的數字證書被插入到要簽名的軟件;工具
數字簽名的驗證過程本質上爲:測試
用戶對要驗證的軟件建立hash;加密
使用發佈者的公共密匙來解密被加密的hash;.net
比較解密的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
- http://timestamp.wosign.com/timestamp
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.wosign.com/basic/codesign_basic.htm
http://www.tech-pro.net/code-signing-for-developers.html
http://siddesh-bg.blogspot.com/2008/12/code-signing-process.html