1. 程式人生 > >makecert 制作數字證書 給DLL加一個數字簽名

makecert 制作數字證書 給DLL加一個數字簽名

一個數 signature 結構 用戶 com 文章 國家 令行 磁盤

聲明:文章整理自互聯網

我僅需要給dll添加(替換)一個簽名,所以我只看了第一步和第三步,其余的部分我沒有測試,不能保證內容的是否正確.
看了很多關於DLL加簽名的教程 大多是錯誤的 完全無法正常走下去,所以整理了這個文章,僅為了方便自己下次需要這個功能的時候不用再折騰,本文內容大多抄自 makecert 制作數字證書
在MS的SDK中有個證書生成工具makecert.exe,可以使用這個工具來生成測試用的證書

第一步,生成一個自簽名的根證書(issuer,簽發者).

makecert -n "CN=Root,[email protected]" -r -sv RootIssuer.pvk RootIssuer.cer

在命令行中輸入上述命令回車後,會彈出設置密碼的文本框,設置完後請記密碼後面會用到
在數字簽名工具包文件夾下會多出2個文件,就是在剛才操作下生成的數字認證文件

代碼說明:

makecert指的是數字簽名工具包中的makecert.exe工具
RootIssuer.pvk RootIssuer.cer 是你要生成的數字認證文件,名字可以自定義
CN=Root,[email protected] 是簽名人姓名和電子郵件地址

如果僅僅是給DLL添加數字簽名,可直接跳轉到第三步

第二步,使用這個證書簽發一個子證書(使用者,subject)

makecert -n "CN=Child" -iv RootIssuer.pvk -ic RootIssuer.cer -sv ChildSubject.pvk ChildSubject.cer

此時,會彈出提示框先給這個子證書的私鑰文件ChildSubject.pvk設置保護口令;
然後,輸入這個子證書的私鑰(在ChildSubject.pvk中)口令來獲取子證書的公鑰(在ChildSubject.cer中)
(pvk裏面一般存儲rsa算法結構,可以分別獲取公鑰和私鑰)
接下來會提示輸入根證書私鑰(在RootIssuer.pvk中)口令來簽發子證書(公鑰和用戶信息)
如果你還要簽發更多的子證書,類似的,使用這個證書來簽發再下層的證書,前提是ChildSubject證書也可以用於簽發(作為Issuer)用途.

第三步,用第一步生成的數字簽名,簽名DLL文件

擊文件夾下的signcode.exe文件,選擇你要添加數字簽名的.dll文件>>簽名類型:自定義>>從文件選擇中:選擇剛才生成的RootIssuer.cer文件

磁盤中的私鑰文件:選擇wotuanOk.PVK>>輸入剛設置的密碼>>選擇算法加密>>時間戳服務(免費的時間戳服務:WoTrus Free Timestamp Service)
完成後,在查看.dll屬性就出來你想要的效果,這證書是自己頒發的!

備註:

(1)如果你需要一個交互證書,用於安全通信,那麽,加入選項 -sky exchange;
(2)如果你需要一個簽名證書來簽發證書或者二進制文件,那麽,加入選項 -sky signature.
(3)如果你需要一個客戶端證書來標誌你的身份,或者個人信息保護(電子郵件),那麽,選項-n 中的E字段是不可缺少的.
舉例:-n "CN=公司名稱, E=E-MAIL地址, O=組織名稱, OU=組織單位, C=國家, S=省份(州), P=縣城"

(4)如果使用openssl的小工具來生成證書可以參考: http://blog.csdn.net/hacode/article/details/43834825

其他輔助工具:

1)公鑰證書格式轉換成SPC. cert2spc.exe

cert2spc TestRoot.cer TestRoot.spc

.spc 意思是 軟件發布者證書(Software Pulisher Cerificate).

2)將公鑰證書和私鑰合並成一個PFX格式的證書文件.pvk2pfx.exe

pvk2pfx -pvk TestRoot.pvk -spc TestRoot.spc -pfx TestRoot.pfx

輸入TestRoot.pvk的保護口令來合並.pvk和.spc文件,如果你不設置即將合並出來的TestRoot.pfx的保護口令的話,這個保護口令和輸入文件TestRoot.pvk的保護口令一樣.(備註:直接從cer文件也可以,不一定要得到SPC文件).

3)簽名工具.signtool.exe
二進制文件數字簽名.為了保證二進制文件的完整性,數字簽名是一個好的方法.
以下命令啟動一個有圖形界面的文件簽名工具向導:

signtool wizard

以下是命令行方式的簽名:

signtool  sign /f "pfx文件的全路徑" /p "pfx文件的保護口令" /t "http://timestamp.verisign.com/scripts/timstamp.dll" /d "本次簽名的描述" "被簽名的程序的全路徑"

makecert 制作數字證書 給DLL加一個數字簽名