系列目錄:html
假如,明明和麗麗相互不認識,明明想給麗麗寫一封情書,讓隔壁老王送去程序員
程序員之網絡安全系列(二):如何安全保存用戶密碼及哈希算法 咱們保證了數據的完整性算法
程序員之網絡安全系列(三):數據加密之對稱加密算法
咱們對數據進行了加密瀏覽器
程序員之網絡安全系列(四):數據加密之非對稱加密算法
咱們使用了非對稱密鑰算法,咱們讓「隔壁王叔叔」傳遞了祕鑰。安全
上面幾步仍是不夠的,好比王叔叔在交換祕鑰的過程當中作了手腳呢?網絡
如何作手腳?看下圖:性能
那麼明明如何知道王叔叔給的公鑰就是麗麗的公鑰呢?那麼就引入了數字證書網站
那麼王叔叔要讓明明相信他給的公鑰就是麗麗的公鑰,那麼他能夠開一個證實,好比找權威機構「敏捷的水」給開個介紹信,介紹信上給加個公章。那麼這裏的介紹性就是數字證書, 公章就是數字簽名, 那麼"敏捷的水"就是頒發證書的機構CA(Certificate Authority),也就是證書受權中心。ui
CA CA 是「Certificate Authority」的縮寫,也叫「證書受權中心」。
它是負責管理和簽發證書的第三方機構,就比如例子裏面的「敏捷的水」。通常來講,CA 必須是你們都信任的、承認的。所以它必須具備足夠的權威性。只有明明和麗麗都信任的人才能來證實,對吧?加密
CA證書: CA 證書,就是CA頒發的證書。
證書之間的信任關係: 用一個證書來證實另外一個證書是真實可信。
證書信任鏈: 證書之間的信任關係,是能夠嵌套的。好比,A 信任 A1,A1 信任 A2,A2 信任 A3......,這就是證書的信任鏈。只要你信任鏈上的第一個證書,那後續的證書,都是能夠信任的。
根證書(Root Certificate): 下圖,處於最頂上的樹根位置的那個證書,就是「根證書」。除了根證書,其它證書都要依靠上一級的證書來證實本身。那誰來證實「根證書」?根證書本身證實本身,這時候咱們用戶就須要本身選擇是否相信某個根證書。
根證書是整個證書體系安全的根本。若是某個證書體系中,根證書再也不可信了,那麼全部被根證書所信任的其它證書,也就再也不可信了。
咱們看一下亞馬遜的證書,當咱們點擊瀏覽器左邊綠色的鎖時,咱們能夠看到以下的證書。
咱們挑重點的解釋一下
Issuer (證書的發佈機構)
指出是什麼機構發佈的這個證書,也就是指明這個證書是哪一個公司建立的(只是建立證書,不是指證書的使用者)。對於上面的這個證書來講,就是指"Symantec Corporation"這個機構。
Not valid before, Not valid after (證書的有效期)
Public key (公鑰)
這個咱們在前面介紹公鑰密碼體制時介紹過,公鑰是用來對消息進行加密的。
這個證書是發佈給誰的,或者說證書的全部者,通常是某我的或者某個公司名稱、機構的名稱、公司網站的網址等。
就是指的這個數字證書的數字簽名所使用的加密算法,這樣就可使用證書發佈機構的證書裏面的公鑰,根據這個算法對指紋進行解密,指紋的加密結果就是數字簽名。
這個是用來保證證書的完整性的,也就是說確保證書沒有被修改過,其原理就是在發佈證書時,發佈者根據指紋算法(一個hash算法)計算整個證書的hash值(指紋)並和證書放在一塊兒,使用者在打開證書時,本身也根據指紋算法計算一下證書的hash值(指紋),若是二者一致,就說明證書沒有被修改過,由於證書的內容被修改後,根據證書的內容計算的出的hash值(指紋)是會變化的。 注意,這個指紋會使用CA這個證書機構的私鑰用簽名算法(Signature algorithm)加密後和證書放在一塊兒,只有用CA的公鑰才能解開這個簽名。
注意 權威機構的證書都是內置在操做系統裏的。
因而可知,一個證書受不受信任,那就要看你要不要添加到操做系統裏,權威的認證機構的證書都內置在操做系統裏的。
另外,咱們本身也能夠製做自簽名的證書,可是須要別人承認你,這個在企業內部或者開發階段是能夠,咱們能夠本身製做一個證書添加到操做系統裏。
那麼,問題來了,當你訪問https://www.12306.cn 時,你就會獲得下面的結果
這是爲何呢?
我相信你看完本文應該清楚,那是由於12306 本身給本身發了個證書,而這個證書默認是沒有被操做系統信任,
可是當我把根證書添加到操做系統後,依然是https://www.12306.cn 不行,而後我發現是證書對應的域名不對,證書對應的域名是https://kyfw.12306.cn 訪問這個域名後,雖然證書驗證經過,可是瀏覽器的鎖仍是沒有變綠。
爲何呢? 看提示,是由於12306使用了一個比較弱的機密算法(This site uses a weak security configuration (SHA-1 signatures), so your connection may not be private.),我猜他們是爲了性能??
可是,就算瀏覽器地址欄的鎖不能變綠,咱們還得訂票不是嗎?
我以爲12306可能須要一個操做系統內置的認證機構來發一個證書,否則普通的用戶根本不知道怎麼安裝證書,若是不使用https,那麼安全性如何獲得保證呢?
回到開頭的例子,明明和麗麗能夠找一個權威機構來發一個證書,並且本身都內置了這個權威機構的證書。當王叔叔把麗麗的證書給明明時,明明就能夠知道證書是不麗麗給的,所以就能夠肯定證書裏的公鑰是不是麗麗的,若是能夠肯定是麗麗的,那麼就能夠確保加密的內容只有麗麗能夠解開,由於只有麗麗有對應的私鑰。