C++瀏覽器插件,ActiveX開發(五)

前面四篇文章都是在描述如何用C++開發基於MFC的ActiveX插件以及如果對插件進行打包和在Web頁面中調用,但確忽略了一個非常重要的問題:代碼簽名。《瀏覽器插件之ActiveX開發(三)》提及了兩種註冊插件的方法,其中IE自動下載並註冊插件的方法就涉及到簽名問題,如果cab包是未簽名的或簽名不被信任的,IE就拒絕註冊該插件。 

一、數字簽名簡述

     現在的各種軟件星羅密佈、魚龍混雜,用戶在使用軟件程序時一定要十分謹慎,稍不留意,就被病毒或惡意程序侵害。代碼數字簽名的出現就在一定程度上解決了這個問題。那麼經過數字簽名的軟件有什麼好處?軟件一旦經過數字簽名,至少可以保證以下兩點:

      1)該軟件確實是由數字簽名證書中顯示的軟件開發商開發的;

      2)該軟件自軟件開發商發佈以後,沒有被第三方做過任何修改。

 

      不過,要完全理解數字簽名或PKI(數字簽名是PKI的組成部分,Public Key Instructure),還需要理解一下基本常識,例如對稱加密、非對稱加密、摘要算法、公鑰、私鑰、數字證書、根證書等等。以下幾篇文章均對這些概念做了通俗易懂的解讀:

      a) 白話數字簽名

      b) CA認證原理以及實現

      c) 瞭解數字證書

      d) 軟件代碼數字簽名基本原理

      e) 數字簽名

      f) 爲什麼需要PKI

      g) 數字簽名(代碼簽名)流程

      h) 12306在線買火車票爲什麼需要安裝根證書

 

二、爲什麼ActiveX需要數字簽名?

     由於ActiveX插件在運行時與本地桌面應用程序一樣,對用戶系統的資源有極大的訪問權限,如果讓任何ActiveX通過Web頁面都能自動下載並註冊的話,那對用戶必將造成非常大的威脅。所以默認設置下,IE將對需自動下載的cab文件進行數字簽名認證,只有經過數字簽名了且簽名認證通過的cab包才自動下載並註冊到用戶系統中。

一般地,不僅僅需要對cab包進行代碼簽名,在打cab包之前還會對ocx文件進行代碼簽名。

 

三、如何進行代碼簽名?

      1、首先需準備用於代碼簽名的相關工具SignTool.exe,可以從這裏下載

      2、申請可用於ocx文件簽名的代碼簽名數字證書,一般是需付費的。如果是測試用,可以有幾種方式:

          a) 自己創建一個測試簽名證書以及根證書;

          b) 可以從www.ca365.com網站申請免費代碼簽名證書或測試證書(應用時需自動導入根證書到用戶系統裏);

          c) 借用淘寶的支付寶證書(淘寶對每個支付寶用戶都可以頒發一個數字證書)。

 

          申請數字證書的過程實際上是:

           1)  在申請者的計算機上創建一個密鑰對,即一個私鑰和一個公鑰,私鑰保留在申請者計算機內,將公鑰傳送給CA機構;

           2)  CA機構在通過必要的線下審覈後(測試證書和免費證書相當於沒有審覈過程的),用CA自己的私鑰對申請者的申請信息進行簽名(申請者信息包括申請者傳過來的公鑰、申請者自身基本信息等),並加上時間戳。CA對申請信息進行加密後就生成了一個證書,一般是以.cer文件的形式下發給申請者。

 

      3、用signTool工具對文件進行簽名:

Signtoolsign/f"xxxx.pfx"/d"卡設備讀寫機ActiveX" /duhttp://www.51diancai.com/thttp://timestamp.verisign.com/scripts/timstamp.dll "xxxxx.cab"

         其中:

         xxxx.pfx 是簽名證書(實際上包含了代碼簽名數字證書和私鑰,在IE的證書管理容器裏“個人”裏導出時可以選擇包含私鑰);

http://timestamp.verisign.com/scripts/timstamp.dll 是時間戳服務。

 

       有關代碼簽名以及創建測試簽名證書的問題以下文章均有詳細介紹,不再贅述:

 

四、根證書自動安裝問題

如果數字簽名證書是從VeriSign等機構購買的,一般不存在根證書問題,因爲微軟的IE已經默認將VeriSign設置爲受信任的根證書機構了:

p_w_picpath

      但如果是從CA365這類不是很權威的機構申請的證書,由於這些機構的根證書默認並不在IE的“受信任的根證書頒發機構”名單裏,所以在使用時需要先在用戶電腦上將CA365的根證書手動導入進去。其實,12306.cn網站的根證書就是自己給自己頒發的,所以其網站上就明文提示需要自動安裝根證書:

p_w_picpath

 

      對於絕大部分用戶來說,對什麼什麼叫數字簽名什麼叫根證書之類的概念是一頭霧水的,讓他們自己安裝根證書感覺有點憋屈。如果能讓IE自己自動安裝根證書就好了。理論上是可以自動安裝的,但由於權限的問題實際用起來不是那麼爽,用戶體驗仍然很差。其原理就是利用微軟的CAPICOM組件和xenrlinf組件對本地證書進行操作從而達到檢測根證書是否存在以及安裝證書的目的的,以下有兩個文章對此做了描述:

      a) 將Capicom調用代碼封裝到ActiveX——解決javascript調Capicom讀取數字證書信息時,IE彈出安全提示的問題

      b) 使用CAPICOM實現證書管理

 

     上海證券報社遠程辦公系統就使用了自動安裝根證書的方法:

http://ro.cnstock.com/

p_w_picpath

 

      另外,在CA365上也提供了自動安裝根證書的代碼例子(如何在用戶的客戶機上自動安裝根證書?):

http://www.ca365.com/forward.do?pageurl=/ca/yhsc/11.jsp

      只不過這個例子在運行時一般會出錯,以下語句總是創建對象失敗:

Set st = CreateObject("CAPICOM.Store")

      究其原因,還是瀏覽器對ActiveX的安全設置問題,降低IE對ActiveX的安全設置就可以了,但這個要求對於用戶來說太麻煩了,還不然讓用戶自己一步一步將根證書導入系統中,或者自己包裝一個安裝程序,運行後自動導入根證書。   


=======================================================================

http://www.cnblogs.com/qguohog/archive/2013/01/28/2880276.html

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