安装根证书
? ? ?在線買火車票為什么要安裝根證書?
發布于: 2012 年 1 月 8 日
?劉暉
?
?
?
本文想簡單談談那個所謂的“根證書”。在訪問鐵道部網上售票官網 www.12306.cn 后,有一個醒目的提示,為保證順暢購票,需要下載安裝根證書。那么什么是根證書?為什么買火車票的時候需要下載和安裝,在淘寶等在線交易網站購物時候為什么就不需要這樣做?
今年開始,人民群眾們終于可以通過互聯網購買火車票了。雖然說在線買的難度不比以往排隊購買低多少,但這總算是一次值得鼓勵的嘗試。不過在線購票系統一經退出,在技術上就已經被人批得體無完膚。
為了確保安全,很多涉及在線交易的網站,例如網上銀行、購物網站等,都會使用SSL技術對頁面內容進行加密。SSL技術在這里的主要用途有兩個:
- 確保網站服務器和用戶瀏覽器之間的通訊不被竊聽:這一點很好理解。SSL屬于一種公鑰加密體系,簡單來說,一個SSL證書分為兩部分:公鑰和私鑰。其中私鑰會被網站所有者妥善保管,并在服務器端用私鑰將網絡通訊全部加密;而公鑰會在網上廣為傳播,一個公鑰加密后的數據只有用所對應的私鑰才能解密。因此只要SSL證書本身可以保證安全,那么在訪問網站的時候就可以保證網絡通訊不被他人所竊取,并且如果有人進行中間人攻擊,因為沒有相應的密鑰,導致篡改后的數據無法通過校驗,因此可以及時察覺。
- 確保網站所宣稱的身份真實可靠:這一點也不難理解。網上有個網站叫做支付寶,可如何保證這個網站就是那個真正的支付寶,而不是其他人偽造的釣魚網站?因此真正的支付寶可以使用SSL證書,這種針對企業用的證書的申請手續比較繁瑣,有一大堆審查流程,需要提交大量相關的證明文件,因此可以保證只有真正的某公司才能以這個公司的名義申請證書,只要申請到證書,就可以確信身份的可靠。此外近些年還有一種更可靠的EVSSL證書。
試試看訪問“https://www.alipay.com”這個域名,隨后可以看到,在瀏覽器的地址欄,“Http”協議后面出現了“s”這個字母,并且IE地址欄的右側顯示了一個鎖頭圖標,因此證明該網站是SSL加密的。點擊這個鎖頭圖標后,還可以看到網站所用證書的相關信息。
加密功能基本上沒什么需要解釋的,因此下文的重點將放在身份可靠性這塊。在上圖所示界面上點擊“查看證書”鏈接,隨后可以看到該網站SSL證書的詳情:
?
上圖顯示的“VeriSign Class 3 International Server CA – G3”是證書頒發機構,而“www.alipay.com”是證書持有人。那么到底應該怎樣通過這些信息判斷網站是否可靠?
在這里一個很通用的規則是:如果瀏覽器檢測到加密網站所用的證書是正常的,那么地址欄就會顯示為綠色(使用EVSSL證書)或者白色(使用普通SSL證書),這種情況下可以放心地瀏覽該網站,并提交自己的數據;如果瀏覽器檢測到網站的證書有問題,那么地址欄就會顯示為紅色,提醒我們注意,同時取決于具體情況,地址欄右側會顯示有“證書錯誤”按鈕,而且網站內容不會顯示,取而代之的是瀏覽器的警告信息。基本上主流瀏覽器的最新版本都已經具備這樣的功能。
這個過程的基本原理是:假設我們信任A公司,而A公司信任B公司,那么我們就可以信任B公司。很明顯,“www.alipay.com”的證書是“VeriSign Class 3 International Server CA – G3”頒發的,這表示后者信任前者,可以證明前者的真實身份,但是我們又憑什么信任后者這個證書頒發機構?
上述文字里不止一次提到“信任”一詞,那么“信任”在這里是什么意思?是否像我們平時講話時說的“我信任他”那樣,代表我們相信他是個好人,不會干壞事?其實完全不是這樣。這里所說的“信任”,只是說明證書持有人的身份是真實可靠的,至于持有人用這個證書干什么事情,不在“信任”的范疇內。例如,網上很多臭名昭著的惡意軟件,現在都帶有數字證書(倒是很多正規用途的軟件因為開發商缺乏安全觀念不帶證書),同時因為這些數字證書的“根”都是我們信任的根證書頒發機構,因此,操作系統和瀏覽器是信任這些公司的身份的,但并不代表這些公司的軟件不會干壞事。只要肯花錢,任何人都可以在商業性質的證書頒發機構買到直接被我們的系統所信任的證書。
其實Windows和任何操作系統本身就包含一些受信任證書頒發機構的根證書,要查看這些根證書,可以運行“certmgr.msc”打開證書控制臺,然后從控制臺窗口左側的控制臺樹中依次進入“證書-當前用戶”→“受信任的根證書頒發機構”→“證書”,隨后右側的窗口中會顯示本機預置的所有根證書頒發機構,其中就有“CA – G3”,這表示我們信任“CA – G3”,而“CA – G3”信任“www.alipay.com”,因此我們可以信任“www.alipay.com”。如果從證書控制臺中刪除“CA – G3”的根證書,表示我們不再信任它,那么它所信任的公司也將不再被我們信任。
按照上文的方法打開證書控制臺,并進入到“不信任的證書”→“證書”節點后,還會發現里面列出了多個頒發給大量知名企業的證書,例如Microsoft、Google、Skype、Yahoo等。為什么會不信任這些大牌互聯網企業?就是因為某家根證書頒發機構被黑客攻破,導致這些大企業所用的證書私鑰被竊取。因此為了保證安全,這些被盜證書已經被吊銷。因而將原本被盜的證書都添加到“不信任的證書”節點下,這樣盜取證書的黑客就算使用這些證書給病毒簽名,偽裝成這些大企業,也會因為證書吊銷的緣故不會讓人輕易上當。這家倒霉的公司就是荷蘭的DigiNotar,該公司因為這次事件現在已經破產,而從中也足以證明證書吊銷機制的重要性。這一點會在下文詳細介紹。微軟已經通過KB 2607712補丁將受影響的證書全部設置為不信任。
這里要重點提出“根證書”這個概念,全世界具有提供數字證書業務的公司有很多,而Windows自帶的“根證書”很少,默認情況下,我們是如何信任這么多不同公司頒發的不同證書的?其實這就是“根”這個字的含義,因為可以頒發證書的公司雖然很多,但最基本的根證書頒發機構只有有限的幾個,默認情況下都是被操作系統所信任的。那么既然操作系統能信任根證書頒發機構,自然也就可以信任被根證書頒發機構信任的公司,進而可以信任被這些公司所信任的下一級公司。
如何證明這一點?可以單擊上圖中的“查看證書”鏈接,隨后打開“證書”對話框,切換到“證書路徑”選項卡后,可以看到下圖所示界面。從該圖中可以看出,整個證書信任鏈的路徑分為三個層次,最頂層的是我們信任的根證書頒發機構,該機構給“International Server CA – G3”頒發了證書,因此,我們信任“CA-G3”;隨后“CA-G3”又給“www.alipay.com”頒發了證書,因此也可以信任“www.alipay.com”。如果“www.alipay.com”再給別人頒發證書,那么這個人的身份依然可以被我們信任。
而鐵道部的在線訂票網站并沒有走這個一般意義上,涉及金融交易的商業化網站都嚴格遵守的方法。也就是說,鐵道部并沒有花錢在商業性質的CA(證書頒發機構)購買受信證書,他們直接自己給自己頒發證書。這樣的做法一般主要是用于測試或學習等非正式場合,但如果一個商業化網站想要正式上線運營,通常并不會這樣做,因為對用戶來說風險太大。
當我們查看12306.cn 這個網站的證書信息時就會發現,這個證書根本沒有一個有效的受信任CA,完全是自己給自己發著玩的。
?
上圖信息顯示,該證書的頒發者以及根證書是“SRCA”,不知道這個縮寫代表什么意思,可能是鐵道部內部的某個系統。因為SRCA的身份不被系統自帶的任何一個根證書所信任,因此12306.cn網站所用的證書默認也不會被任何一個系統所信任。因而鐵道部要求安裝根證書的原因,就是讓訪客將這個證書手工添加到“受信任的根證書頒發機構”節點下。
很遺憾的是,這種做法雖然很不安全,可國內的大佬們很喜歡使用。例如在我的系統中,這里就有建行和工行網銀自行添加的根證書。
那么這種做法除了能省幾個錢之外,對用戶來說有什么危害?
在12306.cn訂票的很多人可能會看到過“該站點安全證書的吊銷信息不可用,是否繼續”這樣的信息。這是什么意思?
還是以上文那個DigiNotar的例子來說,假設某個大型CA被攻擊,私鑰被竊取,這時候有兩種方法盡量避免損失:
第一種方式比較好理解,但并不是所有公司都能獲此殊榮。畢竟主流操作系統的用戶數量龐大,根本不可能針對一個地區性的,或者規模很小的公司的被盜證書發布更新,強制不信任。因此第二種情況就至關重要了。每個證書中都包含CRL,其實這個可以理解為一個網址,通過這個網址可以獲得證書吊銷的相關信息。
因此如果一個小公司通過商業性CA購買的證書被盜了,只要將相關信息告知CA,這家CA就會將這個證書的內容添加到CRL中。隨后任何一個用戶在執行涉及到證書的操作,例如安裝帶有數字簽名的軟件,或者訪問SSL網站的時候,系統都會通過這個CRL地址檢索吊銷清單,并查看當前軟件或網站使用的證書是否位于清單中。如果不在,就證明這個證書依然是可信任的;如果在,就證明該證書已經被盜,因此軟件或網站存在仿冒的可能。
而因為12306.cn使用了自己給自己頒發的證書,因此也就根本無法在自己的證書中包含CRL信息,所以會看到“吊銷信息不可用”的提示,這意味著瀏覽器在告訴你,你所訪問的網站,不一定能完全證明其可靠,這可能是真網站,但也有是釣魚網站的可能。
而如果12306.cn的證書私鑰丟失或被盜(看看去年底的大規模泄密事件,誰敢保證沒有這種可能性),持有該證書的人想要偽造一個釣魚網站,或者以鐵道部的身份發布惡意軟件,那真是輕而易舉,并且鐵道部對此會束手無策。
畢竟在線購買火車票的人全都安裝了這個根證書,而該證書根本無法通過CRL吊銷。此外還有一個更重要的問題,如果盜取該證書的人繼續使用“SRCA”的身份給其他人以其他身份頒發證書,例如以銀行或支付中介的名義,結果會怎樣?因為所有在線購買過火車票的人,由于根證書的關系,系統已經信任SRCA的根證書,因此這些偽造的證書也會直接被信任。最壞的情況下,所有熱門的SSL加密網站(購物、銀行、股票….)要想被偽造都是輕而易舉的。
什么意思呢?如果某天你訪問的“支付寶”網站的證書信任鏈是下面這樣,你覺得會是什么后果?
?
真心希望這種情況永遠不會發生。同時更加希望國內這些大佬們有更多安全意識,盡快認識到目前這種做法的不足。商業受信證書雖然需要花錢買,但不是太貴,真的!
當然,上述希望可能永遠不會成真,因此作為一般用戶,如果你已經成功在線購買到火車票(恭喜你啊,你要不要去買個彩票試試手氣),那么建議你在“受信任的根證書頒發機構”節點下將SRCA的根證書徹底刪除。
本文部分內容節選自我的原創圖書《Windows 7安全指南》。
總結
- 上一篇: 前端学习(2378):使用vue-cli
- 下一篇: 【题目记录】——2021 年百度之星·程