世上根本就沒有HTTPS協議,只有HTTP協議。——知乎某答友

某天,收到領導指示:學習一下X.509相關原理。

很多開發者可能和我一樣覺得X.509這個詞很陌生,但其實我們經常和它打交道,屬於典型的「日用而不知」的東西。

那麼X.509是什麼呢?

X.509是一種數字證書格式標準

應用很廣泛,現在HTTPS依賴的SSL證書使用的就是使用的X.509格式。這也就是說,每當我們打開https開頭的網站都會用到它。

格式標準

簡單地說,格式標準就像寫HTML文件時的規範:開頭聲明文檔類型,html作為根標籤,元信息放在head標籤中,頁面內容放在body標籤中等等。

當然這個例子不是那麼貼切,因為實際上不按照這個格式編寫的html文件瀏覽器也能解析出來。更貼切的例子應該是JSON文件格式,規定了嵌套關係必須用大括弧,數組必須用中括弧,字元串必須用雙引號等等,如果違反了一條其中的規則,那麼就無法被正確的解析。

這個標準的具體內容是什麼呢?

X.509規定的格式大致如下:

版本號 序列號 簽名演算法 頒發者 證書有效期 開始日期 終止日期 主題 主題公鑰信息 公鑰演算法 主體公鑰 頒發者唯一身份信息(可選) 主題唯一身份信息(可選) 擴展信息(可選) 簽名

下圖是某網站的 X.509 證書信息

數字證書

那麼數字證書又是什麼?

簡單的說,數字證書就是通過加密演算法來製造的一個網路「身份證」,用來證明通信方的真實身份。這個「身份證」的製作過程也很有意思,並不是由一個機構統一發放,而是層層頒發。比如 A 持有了可信證書,那麼它頒發給的 B 的證書也是可信的, B 再頒發給 C 的證書也是可信的。整體結構很像數據結構中的「樹」,其中 A 的證書為「根證書」,B 的為「中介證書」,C 的為「終端證書」。而 A、B 都被稱作認證機構,簡稱 CA(Certificate authority)。

根證書
|
中介證書
|
終端證書

  • 根證書:通常預先安裝在操作系統和瀏覽器中,是由大公司和政府聯合製作的(用戶也可以自己製作,但是會有安全風險),作為證書鏈的起點。
  • 中介證書:持有中介證書的CA主要負責給終端頒發證書,這些終端證書既有收費的也有免費的,免費終端證書一般使用期限是1年。
  • 終端證書:終端證書一般就是我們在瀏覽器上可以查看到的證書,通常用於具體網站服務中。這類證書不會再用作頒發新的證書。

每個證書都可以沿著樹往上追溯到根證書,從而形成一條信任鏈。

比如下面這種圖就是某網站證書的信任鏈信息。

關於 X.509 的內容就分享完了。

但是心中的疑惑驅使著我繼續探索,這證書靠譜么?

如果黑客偽造認證機構給木馬網站頒發證書呢?

安全機制

證書採用的是一種非對稱加密機制來保證信息不被竊取和複製。

加密技術

這裡稍稍解釋下非對稱機密,先說說密碼學。

信息加密的需求其實一直都存在,從古代開始就使用各種技術來加密重要的信息,但是古代的加密安全程度都是基於加密方式的。

也就是說,別人如果知道了加密方式,那麼就可以解密密文信息。

而現代的加密技術安全性在於密鑰的安全,也就是說加密方式(演算法)是公開的,只要密鑰不被竊取或泄露,信息就是安全的。

雖然加密演算法有很多種,但是大致上可以分為兩類:對稱加密和非對稱加密。

對稱加密的通信雙方都是用同一個密鑰進行加解密,而非對稱加密則要求使用不同的密鑰進行加密和解密。

再回到證書的頒發過程,現在很多雲服務廠商都提供了申請數字證書的功能,它會像CA發起申請,CA收到申請之後,做了下面的事情:

  1. 使用加密演算法生成公私鑰對。私鑰一般是以.key為後綴名的文件,公鑰存儲於以.csr結尾的文件中。
  2. .csr文件中補充一些信息比如有效期限等,頒發者,並用自己的私鑰對證書進行簽名。這樣就生成符合X.509格式的證書。
  3. 用戶收到證書後,在web伺服器(或負載均衡等設備)上進行部署。

SSL證書

符合X.509格式的證書有多種,這裡以SSL證書為例。

常見的場景會是下面這樣:

  1. 客戶端,比如瀏覽器會向服務端發送請求,服務端為了證明自己的身份,會發送證書給對方。
  2. 瀏覽器讀取證書的數字簽名部分,用自身根證書列表中對應的公鑰證書對其進行解密。如果解密成功,並且證書哈希值與簽名內的哈希值匹配一致,可證明站點提供的證書確實是該CA根證書籤發的,否則給出風險提示。
  3. 驗證通過之後,使用證書中的公鑰對隨機數和對稱加密演算法加密,發送給服務端,服務端用私鑰進行解密,獲得密鑰和加密演算法。
  4. 服務端與瀏覽器後續通信將會使用新的對稱加密演算法和隨機密鑰加密信息。

證書在整個流程起到了重要的作用,那麼能不能通過竊取和偽造的方式來獲取通信內容呢?

  • 竊取。首先證書當然是可以被竊取的,因為它是公開的,但是拿到了證書後也只能和服務端進行通信,不能用來竊取其它信息,至於證書的私鑰存儲在服務端,更加不可能隨意被竊取了。
  • 偽造。如果有人偽造了一張網站證書,那麼瀏覽器在向CA查詢證書信息的時候就會驗證失敗。

那這麼說就是絕對安全了嗎?非也~

對於DNS劫持的情況還是無解的。比如瀏覽器訪問網站的時候給了一個假證書,然後向CA驗證證書的時候又訪問了一個假網站,證書就有可能被驗證通過。從而黑客可以作為中間方獲取並轉發雙方的數據。

總結

SSL證書從生成到使用涉及到了三次加解密過程:

  1. 證書生成的時候利用私鑰簽名,驗證證書的時候利用公鑰解密。
  2. 確認證書有效後,利用證書中的公鑰進行加密,服務端利用私鑰解密。
  3. 雙方使用新生成的隨機密鑰進行數據加解密。

用一張結構圖表示下HTTPS和X.509的關係:

HTTPS
/
HTTP TLS/SSL
/
通信內容 確認身份
對稱加密 SSL證書 —— X.509 格式,非對稱加密


作者:亞里士朱德

鏈接:imooc.com/article/28806

來源:慕課網

本文原創發佈於慕課網 ,轉載請註明出處,謝謝合作


推薦閱讀:
相关文章