1. 程式人生 > >數字證書及 CA 的掃盲介紹

數字證書及 CA 的掃盲介紹

轉自:http://www.sohu.com/a/112496619_463989

再推薦一個相關知識的連結:https://www.cnblogs.com/handsomeBoys/p/6556336.html

★ 先說一個通俗的例子

考慮到證書體系的相關知識比較枯燥、晦澀。俺先拿一個通俗的例子來說事兒。

◇ 普通的介紹信

想必大夥兒都聽說過介紹信的例子吧?假設 A 公司的張三先生要到 B 公司去拜訪,但是 B 公司的所有人都不認識他,他咋辦呢?常用的辦法是帶公司開的一張介紹信,在信中說:茲有張三先生前往貴公司辦理業務,請給予接洽……云云。然後在信上敲上A公司的公章。

張三先生到了 B 公司後,把介紹信遞給 B 公司的前臺李四小姐。李小姐一看介紹信上有 A 公司的公章,而且 A 公司是經常和 B 公司有業務往來的,這位李小姐就相信張先生不是歹人了。

說到這,愛擡槓的同學會問了:萬一公章是偽造的,咋辦捏?在此,俺要先宣告,在本例子中,先假設公章是難以偽造的,否則俺的故事沒法說下去鳥。

◇ 引入中介機構的介紹信

好,回到剛才的話題。如果和 B 公司有業務往來的公司很多,每個公司的公章都不同,那前臺就要懂得分辨各種公章,非常滴麻煩。所以,有某個中介公司 C,發現了這個商機。C公司專門開設了一項“代理公章”的業務。

今後,A 公司的業務員去 B 公司,需要帶2個介紹信:

介紹信1

含有 C 公司的公章及 A 公司的公章。並且特地註明:C 公司信任 A 公司。

介紹信2

僅含有 A 公司的公章,然後寫上:茲有張三先生前往貴公司辦理業務,請給予接洽……云云。

某些不開竅的同學會問了,這樣不是增加麻煩了嗎?有啥好處捏?

主要的好處在於,對於接待公司的前臺,就不需要記住各個公司的公章分別是啥樣子的;他/她只要記住中介公司 C 的公章即可。當他/她拿到兩份介紹信之後,先對介紹信1的 C 公章,驗明正身;確認無誤之後,再比對介紹信1和介紹信2的兩個 A 公章是否一致。如果是一樣的,那就可以證明介紹信2是可以信任的了。

★ 相關專業術語的解釋

費了不少口水,終於說完了一個俺自認為比較通俗的例子。如果你聽到到這,還是想不明白這個例子在說啥,那後續的內容,就不必浪費時間聽了 :(

下面,俺就著上述的例子,把相關的名詞,作一些解釋。

◇ 什麼是證書?

“證書”洋文也叫“digital certificate”或“public key certificate”。

它是用來證明某某東西確實是某某東西的東西(是不是像繞口令?)。通俗地說,證書就好比例子裡面的公章。通過公章,可以證明該介紹信確實是對應的公司發出的。

理論上,人人都可以找個證書工具,自己做一個證書。那如何防止壞人自己製作證書出來騙人捏?請看後續 CA 的介紹。

◇ 什麼是CA?

CA是Certificate Authority的縮寫,也叫“證書授權中心”。

它是負責管理和簽發證書的第三方機構,就好比例子裡面的中介——C 公司。一般來說,CA必須是所有行業和所有公眾都信任的、認可的。因此它必須具有足夠的權威性。就好比A、B兩公司都必須信任C公司,才會找 C 公司作為公章的中介。

◇ 什麼是CA證書?

CA 證書,顧名思義,就是CA頒發的證書。

前面已經說了,人人都可以找工具製作證書。但是你一個小破孩製作出來的證書是沒啥用處的。因為你不是權威的CA機關,你自己搞的證書不具有權威性。

這就好比上述的例子裡,某個壞人自己刻了一個公章,蓋到介紹信上。但是別人一看,不是受信任的中介公司的公章,就不予理睬。壞蛋的陰謀就不能得逞啦。

文字後續提及的證書,若無特殊說明,均指 CA 證書。

◇ 什麼是證書之間的信任關係?

在俺的例子裡談到,引入中介後,業務員要同時帶兩個介紹信。第一個介紹信包含了兩個公章,並註明,公章C信任公章A。證書間的信任關係,就和這個類似。就是用一個證書來證明另一個證書是真實可信滴。

◇ 什麼是證書信任鏈?

實際上,證書之間的信任關係,是可以巢狀的。比如,C 信任 A1,A1 信任 A2,A2 信任 A3……這個叫做證書的信任鏈。只要你信任鏈上的頭一個證書,那後續的證書,都是可以信任滴。

◇ 什麼是根證書?

“根證書”的洋文叫“root certificate”。為了說清楚根證書是咋回事,再來看個稍微複雜點的例子。

假設 C 證書信任 A 和 B;然後 A 信任 A1 和 A2;B 信任 B1 和 B2。則它們之間,構成如下的一個樹形關係(一個倒立的樹)。

處於最頂上的樹根位置的那個證書,就是“根證書”。除了根證書,其它證書都要依靠上一級的證書,來證明自己。那誰來證明“根證書”可靠捏?實際上,根證書自己證明自己是可靠滴(或者換句話說,根證書是不需要被證明滴)。

聰明的同學此刻應該意識到了:根證書是整個證書體系安全的根本。所以,如果某個證書體系中,根證書出了問題(不再可信了),那麼所有被根證書所信任的其它證書,也就不再可信了。這個後果是相當相當滴嚴重(簡直可以說是災難性的),具體在下一個帖子裡介紹。

★ 證書有啥用?

CA 證書的作用有很多,俺為了節省口水,只列出常用的幾個。

◇ 驗證網站是否可信(針對HTTPS)

通常,我們如果訪問某些敏感的網頁(比如使用者登入的頁面),其協議都會使用 HTTPS 而不是 HTTP。因為 HTTP 協議是明文的,一旦有壞人在偷窺你的網路通訊,他/她就可以看到網路通訊的內容(比如你的密碼、銀行帳號、等);而 HTTPS 是加密的協議,可以保證你的傳輸過程中,壞蛋無法偷窺。

但是,千萬不要以為,HTTPS 協議有了加密,就可高枕無憂了。俺再舉一個例子來說明,光有加密是不夠滴。假設有一個壞人,搞了一個假的網銀的站點,然後誘騙你上這個站點。假設你又比較單純,一不留神,就把你的帳號,口令都輸入進去了。那這個壞蛋的陰謀就得逞鳥。

為了防止壞人這麼幹,HTTPS 協議除了有加密的機制,還有一套證書的機制。通過證書來確保,某個站點確實就是某個站點。

有了證書之後,當你的瀏覽器在訪問某個 HTTPS 網站時,會驗證該站點上的 CA 證書(類似於驗證介紹信的公章)。如果瀏覽器發現該證書沒有問題(證書被某個根證書信任、證書上繫結的域名和該網站的域名一致、證書沒有過期),那麼頁面就直接開啟;否則的話,瀏覽器會給出一個警告,告訴你該網站的證書存在某某問題,是否繼續訪問該站點?為了形象起見,下面給出 IE 和 Firefox 的抓圖:

大多數知名的網站,如果用了 HTTPS 協議,其證書都是可信的(也就不會出現上述警告)。所以,今後你如果上某個知名網站,發現瀏覽器跳出上述警告,你就要小心啦!

◇ 驗證某檔案是否可信(是否被篡改)

證書除了可以用來驗證某個網站,還可以用來驗證某個檔案是否被篡改。具體是通過證書來製作檔案的數字簽名。製作數字簽名的過程太專業,咱就不說了。後面專門告訴大家如何驗證檔案的數字簽名。考慮到大多數人用 Windows 系統,俺就拿 Windows 的例子來說事兒。

比如,俺手頭有一個 Firefox 的安裝檔案(帶有數字簽名)。當俺檢視該檔案的屬性,會看到如下的介面。眼神好的同學,會注意到到上面有個“數字簽名”的標籤頁。如果沒有出現這個標籤頁,就說明該檔案沒有附帶數字簽名。

選擇該標籤頁,看到如下介面。

順便說一下,某些數字簽名中沒有包含“郵件地址”,那麼這一項會顯示“不可用”;同樣的,某些數字簽名沒有包含“時間戳”,也會顯示“不可用”。不要緊張,這裡顯示的“不可用”跟數字簽名的有效性沒關係。

一般來說,簽名列表中,有且僅有一個簽名。選中它,點“詳細資訊”按鈕。跳出如下介面:

通常這個介面會顯示一行字:“該數字簽名正常”(圖中紅圈標出)。如果有這行字,就說明該檔案從出廠到你手裡,中途沒有被篡改過(是原裝滴、是純潔滴)。

如果該檔案被篡改過了(比如,感染了病毒、被注入木馬),那麼對話方塊會出現一個警告提示“該數字簽名無效”(圖中紅圈標出)。介面如下:

不論簽名是否正常,你都可以點“檢視證書”按鈕。這時候,會跳出證書的對話方塊。如下:

從後一個介面,可以看到俺剛才說的證書信任鏈。圖中的信任鏈有3層:

第1層是根證書(Thawte Premium Server CA)。

第2層是 Thawte 專門用來簽名的證書。

第3層是 Mozilla 自己的證書。

目前大多數知名的公司(或組織機構),其釋出的可執行檔案(比如軟體安裝包、驅動程式、安全補丁),都帶有數字簽名。你可以自己去看一下。

建議大夥兒在安裝軟體之前,都先看看是否有數字簽名?如果有,就按照上述步驟驗證一把。一旦數字簽名是壞的,那可千萬別裝。

★ 總結

費了半天口舌,大致介紹了 CA 證書相關的概念。想更深入瞭解這方面知識的同學,可以找些資訊保安或密碼學方面的資料,繼續鑽研。