2009年5月1日 星期五

[軟体] 如何產生 certification 文件, 用來 sign 你的軟体

基本上自己認證自己的 certification 文件是沒意義的, 就好像是一個陌生人, 拿著一張自製的證件, 告訴你他是好人, 你會信嗎?

所以一般而言, 我們通常會找一家認證的公司, 由它提供給我們認證文件. 接著我們用這個認證文件來 sign 軟体. 當散佈到網路上時, 由下載的人自行到公正的單位對你的軟体進行驗證.

舉例來說: 一個陌生人拿一張證件告訴你他是好人, 我們到警察局去驗證這張證件的真偽, 然後藉由相信警察局, 而相信這個陌生人是好人.

 

故對於軟体在網路上流通, 為了避免被人竄改, 一般軟体公司會去一家認證公司 (例如: verisign), 驗證身份, 繳年費後,  搭配指定的密碼, 取得認證檔 pvk 與 spc 檔.

有了這兩個檔, 你就可以用 signtool 簽署你的軟体了. 而使用者的軟体會自動連到已知公正機關檢查認證是否為真, if yes, 然後放心讓使用者繼續安裝軟体.

 

至於有沒有一家認證公司可以提供 Opensource 軟體, 免費的 certification 文件呢? 我記得有, 可是這還得仰賴高手的幫忙. 請高手出面說明一下吧. ^_^

 

有人問我: [如果要產生自己的 pvk 與 spc 自己玩, 也就是發行自己認證的 certification, 那該怎麼做呢?]

很簡單, 四個步驟

只不過你軟体裡面的證件, 沒有在公正的地方登記, 瀏覽器 (ex: IE) 會警告使用者.

Step 1:  建立自己認證自己的 certification 文件

指令:

     makecert -sv mykey.pvk -n "CN=Jing Software Inc." mycert.cer

產生文件:
        mykey.pvk
        mycert.cer

 

Step 2:  轉成工具能使用的 Software Publisher Certificate format

指令:

    cert2spc.exe mycert.cer mycert.spc

產生文件:

    mycert.spc

 

Step 3:  組成 pfx 文件 (PKCS #12)

指令:

    pvk2pfx.exe -pvk mykey.pvk -pi <password> -spc mycert.spc 
                              -pfx mycert.pfx -po <password>

例如:
     pvk2pfx.exe -pvk mykey.pvk -pi demo -spc mycert.spc
                                -pfx mycert.pfx -po demo

產生文件:

          mycert.pfx

 

Step 4: 簽署你的軟體

   signtool.exe sign /f mycert.pfx /p <password>
                             /t <timestamp URL> /v "<file to be signed>”

    例如:

      signtool.exe sign
             /f mycert.pfx
             /p demo 
             /t http://timestamp.verisign.com/scripts/timstamp.dll
             /v "<file to be signed>”

   

Enjoy!

by Jing.

 

延伸閱讀

[1] 井民全, “[Plugin] 如何為你的 ActiveX 元件 (cab 檔) 加入數位簽章 – signtool,” http://mqjing.blogspot.com/2009/03/plugin-activex-cab-signtool.html, 2009/03.

4 則留言:

  1. 你好:感謝您的Blog文章,對我目前的工作非常有幫助 謝謝
    我照著你的敍述跟著做,在前面的步驟都是對的...但在Signtool執行就出現問題
    先說
    目的是什麼
    1.要在Win8 64bit安裝Printer Driver但需要有信任的"catalog file"(.cat檔),才可以正常安裝

    結果:
    產生出來的是
    "The signer's certificate is not valid for signing"
    "An error occurred while attempting to sign: C:\AR-24-64bit_04\gcc.cat"
    我下的指令是
    "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin>signtool sign /f gcc_pfx.pfx /p 12345 /t http://timestamp.verisign.com/scripts/timstamp.dll /v
    "C:\AR-24-64bit_04\gcc.cat""
    而我的Cat則是由WinDDK內的inf2cat.exe所產生的(此cat是不被信任的)

    請問我是否有少了什麼步驟或檔案那裡不正確的

    在此先感謝你的幫忙

    回覆刪除
  2. 您好,我在網路上找到您的文章,以下節錄,但因為文章已經不完整,尋尋覓覓找到您的這個網站,請問是否還有這篇文章可以參考嗎.. 感激不盡~~~

    個人著作 @電腦王雜誌 – 30 分鐘寫程式專欄
    歡迎傳閱, 並請多多指教
    井民全個人網站 Advanced Windows Programming Course
    目前網址: http://debut.cis.nctu.edu.tw/~ching
    〈三十分鐘寫程式〉 註解 : 專欄名稱,由編輯
    部填寫。
    自訂快捷鍵 瞬間切換程式
    老闆鍵、熱鍵、我們自己來定義
    文:井民全
    關鍵字: 視窗程式設計, Global Hot Key
    老實說, 我很不喜歡使用滑鼠. 主要的原因就是慢!

    回覆刪除
  3. 自訂快捷鍵 瞬間切換程式 -- 老闆鍵、熱鍵、我們自己來定義 (Let's Define the Global Hotkeys)

    http://debut.cis.nctu.edu.tw/~ching/Course/AdvancedC++Course/__Page/Advanced_PChome/02%20Boss%20Key/bosskey.pdf

    回覆刪除