衆所周知,Activex組件沒有進行有效的簽名,在IE上無法安裝的,除非你讓用戶手工開啓“接收任何未簽名的ActiveX”,這個很明顯不現實。而組件簽名需要證書,證書從哪裏來,你可以選擇付1000到3000元不等在專門的機構去購買,這個費用還僅僅是一年的費用,每年都要繳納一次的。你在google上搜索“微軟代碼簽名證書”可以收到很多這樣的公司在提供這項服務。如果您開發的是產品,我認爲完全可以自己製作證書。讓用戶在使用你的產品的過程中首先下載你製作的證書安裝在本系統,然後方可順利安裝您簽名的ActiveX組件。
一、關於微軟數字證書
關於“數字證書的原理”的基本知識請讀取:http://blog.csdn.net/jiangtongcn/article/details/13015071,這篇博文轉自另外一個博客。這裏我做簡單摘要:
先看下一個證書到底是個什麼東西,在windows下查看一個證書時,界面是這樣的,我們主要關注一下Details Tab頁,其中的內容比較長,我滾動內容後後抓了三個圖,把完整的信息顯示出來:
裏面的內容比較多——Version、Serial number、Signature algorithm 等等,挑幾個重要的解釋一下。
◆Issuer (證書的發佈機構)
指出是什麼機構發佈的這個證書,也就是指明這個證書是哪個公司創建的(只是創建證書,不是指證書的使用者)。對於上面的這個證書來說,就是指"SecureTrust CA"這個機構。
◆Valid from , Valid to (證書的有效期)
也就是證書的有效時間,或者說證書的使用期限。 過了有效期限,證書就會作廢,不能使用了。
◆Public key (公鑰)
這個我們在前面介紹公鑰密碼體制時介紹過,公鑰是用來對消息進行加密的,第2章的例子中經常用到的。這個數字證書的公鑰是2048位的,它的值可以在圖的中間的那個對話框中看得到,是很長的一串數字。
◆Subject (主題)
這個證書是發佈給誰的,或者說證書的所有者,一般是某個人或者某個公司名稱、機構的名稱、公司網站的網址等。 對於這裏的證書來說,證書的所有者是Trustwave這個公司。
◆Signature algorithm (簽名所使用的算法)
就是指的這個數字證書的數字簽名所使用的加密算法,這樣就可以使用證書發佈機構的證書裏面的公鑰,根據這個算法對指紋進行解密。指紋的加密結果就是數字簽名(第1.5節中解釋過數字簽名)。
◆Thumbprint, Thumbprint algorithm (指紋以及指紋算法)
這個是用來保證證書的完整性的,也就是說確保證書沒有被修改過,這東西的作用和2.7中說到的第3個問題類似。 其原理就是在發佈證書時,發佈者根據指紋算法(一個hash算法)計算整個證書的hash值(指紋)並和證書放在一起,使用者在打開證書時,自己也根據指紋算法計算一下證書的hash值(指紋),如果和剛開始的值對得上,就說明證書沒有被修改過,因爲證書的內容被修改後,根據證書的內容計算的出的hash值(指紋)是會變化的。 注意,這個指紋會使用"SecureTrust CA"這個證書機構的私鑰用簽名算法(Signature algorithm)加密後和證書放在一起。
注意,爲了保證安全,在證書的發佈機構發佈證書時,證書的指紋和指紋算法,都會加密後再和證書放到一起發佈,以防有人修改指紋後僞造相應的數字證書。這裏問題又來了,證書的指紋和指紋算法用什麼加密呢?他們是用證書發佈機構的私鑰進行加密的。可以用證書發佈機構的公鑰對指紋和指紋算法解密,也就是說證書發佈機構除了給別人發佈證書外,他自己本身也有自己的證書。證書發佈機構的證書是哪裏來的呢???這個證書發佈機構的數字證書(一般由他自己生成)在我們的操作系統剛安裝好時(例如windows xp等操作系統),這些證書發佈機構的數字證書就已經被微軟(或者其它操作系統的開發機構)安裝在操作系統中了,微軟等公司會根據一些權威安全機構的評估選取一些信譽很好並且通過一定的安全認證的證書發佈機構,把這些證書發佈機構的證書默認就安裝在操作系統裏面了,並且設置爲操作系統信任的數字證書。這些證書發佈機構自己持有與他自己的數字證書對應的私鑰,他會用這個私鑰加密所有他發佈的證書的指紋作爲數字簽名。
如何向證書的發佈機構去申請證書
舉個例子方便大家理解,假設我們公司"ABC Company"花了1000塊錢,向一個證書發佈機構"SecureTrust CA"爲我們自己的公司"ABC Company"申請了一張證書,注意,這個證書發佈機構"SecureTrust CA"是一個大家公認並被一些權威機構接受的證書發佈機構,我們的操作系統裏面已經安裝了"SecureTrust CA"的證書。"SecureTrust CA"在給我們發佈證書時,把Issuer,Public key,Subject,Valid from,Valid to等信息以明文的形式寫到證書裏面,然後用一個指紋算法計算出這些數字證書內容的一個指紋,並把指紋和指紋算法用自己的私鑰進行加密,然後和證書的內容一起發佈,同時"SecureTrust CA"還會給一個我們公司"ABC Company"的私鑰給到我們。我們花了1000塊錢買的這個證書的內容如下:
×××××××××××××××證書內容開始×××××××××××××××××
Issuer : SecureTrust CA
Subject : ABC Company
Valid from : 某個日期
Valid to: 某個日期
Public Key : 一串很長的數字
…… 其它的一些證書內容……
{證書的指紋和計算指紋所使用的指紋算法}[SecureTrust CA的私鑰|RSA] //這個就是"SecureTrust CA"對這個證書的一個數字簽名,表示這個證書確實是他發佈的,有什麼問題他會負責(收了我們1000塊,出了問題肯定要負責任的)
×××××××××××××××證書內容結束×××××××××××××××××
// 記不記得前面的約定?{} 表示RSA加密後的內容,[ | ]表示用什麼密鑰和算法進行加密
我們"ABC Company"申請到這個證書後,我們把證書投入使用,我們在通信過程開始時會把證書發給對方,對方如何檢查這個證書的確是合法的並且是我們"ABC Company"公司的證書呢?首先應用程序(對方通信用的程序,例如IE、OUTLook等)讀取證書中的Issuer(發佈機構)爲"SecureTrust CA" ,然後會在操作系統中受信任的發佈機構的證書中去找"SecureTrust CA"的證書,如果找不到,那說明證書的發佈機構是個水貨發佈機構,證書可能有問題,程序會給出一個錯誤信息。 如果在系統中找到了"SecureTrust CA"的證書,那麼應用程序就會從證書中取出"SecureTrust CA"的公鑰,然後對我們"ABC Company"公司的證書裏面的指紋和指紋算法用這個公鑰進行解密,然後使用這個指紋算法計算"ABC Company"證書的指紋,將這個計算的指紋與放在證書中的指紋對比,如果一致,說明"ABC Company"的證書肯定沒有被修改過並且證書是"SecureTrust CA" 發佈的,證書中的公鑰肯定是"ABC Company"的。對方然後就可以放心的使用這個公鑰和我們"ABC Company"進行通信了。
★這個部分非常重要,一定要理解,您可以重新回顧一下之前的兩章“1、基礎知識”和“ 2、一個加密通信過程的演化”,然後再來理解這部分的內容。如果您把這節的內容看了幾遍還沒有搞懂證書的工作原理,您可以留言指出我沒有說清楚的內容,我好方便進行修正。
證書的發佈機構
前面已經初步介紹了一下證書發佈機構,這裏再深入討論一下。
其實所有的公司都可以發佈證書,我們自己也可以去註冊一家公司來專門給別人發佈證書。但是很明顯,我們自己的專門發佈證書的公司是不會被那些國際上的權威機構認可的,人家怎麼知道你是不是個狗屁皮包公司?因此微軟在它的操作系統中,並不會信任我們這個證書發佈機構,當應用程序在檢查證書的合法信的時候,一看證書的發佈機構並不是操作系統所信任的發佈機構,就會拋出錯誤信息。也就是說windows操作系統中不會預先安裝好我們這個證書發佈機構的證書,不信任我們這個發佈機構。
不受信任的證書發佈機構的危害
爲什麼一個證書發佈機構受不受信任這麼重要?我們舉個例子。假設我們開了一個狗屁公司來爲別人發佈證書,並且我和微軟有一腿,微軟在他們的操作系統中把我設置爲了受信任的證書發佈機構。現在如果有個小公司叫Wicrosoft 花了10塊錢讓我爲他們公司申請了一個證書,並且公司慢慢壯大,證書的應用範圍也越來越廣。然後有個奸商的公司JS Company想冒充Wicrosoft,於是給了我¥10000,讓我爲他們頒佈一個證書,但是證書的名字(Subject)要寫Wicrosoft,假如我爲了這¥10000,真的把證書給了他們,那麼他們以後就可以使用這個證書來冒充Wicrosoft了。
如果是一個優秀的證書發佈機構,比如你要向他申請一個名字叫Wicrosoft的證書,它會讓你提供很多資料證明你確實可以代表Wicrosoft這個公司,也就是說他回去覈實你的身份。證書發佈機構是要爲他發佈出的證書負法律責任的。
到這裏,你可能會想,TMD,那我們自己就不能發佈證書嗎?就一定要花錢去申請?當然不是,我們自己也可以成立證書發佈機構,但是需要通過一些安全認證等等,只是有點麻煩。另外,如果數字證書只是要在公司內部使用,公司可以自己給自己生成一個證書,在公司的所有機器上把這個證書設置爲操作系統信任的證書發佈機構的證書(這句話仔細看清楚,有點繞口),這樣以後公司發佈的證書在公司內部的所有機器上就可以通過驗證了(在發佈證書時,把這些證書的Issuer(發佈機構)設置爲我們自己的證書發佈機構的證書的Subject(主題)就可以了)。但是這隻限於內部應用,因爲只有我們公司自己的機器上設置了信任我們自己這個所謂的證書發佈機構,而其它機器上並沒有事先信任我們這個證書發佈機構,所以在其它機器上,我們發佈的證書就無法通過安全驗證。
二、製作自己的微軟數字證書:
1、準備工具:
2、使用命令makecert.exe創建證書和私鑰文件:
2.1、打開windows命令行模式,輸入:makecert -sv "fq.pvk" -n "CN=lhsoft.net" -r fq.cer
命名說明:
makecert爲微軟數字證書製作命令,如果需要看基本參數信息請輸入:makecert -? 如果需要查看擴展參數信息請輸入:makecert -!
以上命令參數說明:
-sv Subject's PVK file; To be created if not present(如果不留在主題的私鑰文件則創建,關於主題的概念上面介紹的有)
"fq.pvk" 我的私鑰文件的名稱
-n Certificate subject X500 name (eg: CN=Fred Dews)指定主題的名字,這個是有固定的格式的, CN=主題名字 ,CN應該是Certificate Name的縮寫,這裏可以指定一些主題的其它附加信息,例如 O= *** 表示組織信息等等
"CN=lhsoft.net" 我的主題的名字
-r Create a self signed certificate(創建自簽署證書,意思就是說在生成證書時,將證書的發佈機構設置爲自己)
"fq.cer" 生成的證書的文件名
2.2、輸入私鑰密碼:
成功後提示Successed
2.3、查看證書創建好的證書:
最後兩個文件就是我創建好的證書
3、查看證書信息:
雙擊製作成功的證書文件“fq.cer”,查看證書信息
我們可以看到該證書的相關信息:
頒發者:lhsoft.net
頒發給:lhsoft.net
有效的起止時間:如圖
證書的詳細信息:如圖
同時我們看到頒發者和頒發給都是同一個,這是簽名參數-r的作用。
另外由於該證書是我們發行的,IE目前不受信任,IE信任的證書是在Windows系統發佈時添加進去的,如:
當然我們也可以將自己的證書添加到這裏面<受信任的根證書頒發機構>來
三、安裝數字證書:
1、雙擊證書文件:
2、點擊西面的按鈕"安裝證書...",選擇下一步
3、選擇根據證書類型,自動選擇證書存儲區,點擊下一步,再點擊“完成”:
4、點擊“是”安裝成功
四、查看我們安裝的數字證書
IE瀏覽器爲例:Tools菜單--》Internet Options--》Content--》Certificates--》受信任的根證書頒發機構:
雙擊或者點擊查看按鈕可以看到這個證書已經沒有問題
接下來看一下如何打包和簽名Activex組件:
http://blog.csdn.net/jiangtongcn/article/details/13509633