你了解HTTPS,但你可能不了解X 509

2021-09-24 13:22:53 字數 2827 閱讀 8729

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

很多開發者可能和我一樣覺得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)。

根證書

|中介證書

|終端證書

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

比如下面這種圖就是某**證書的信任鏈資訊。

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

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

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

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

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

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

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

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

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

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

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

使用加密演算法生成公私鑰對。私鑰一般是以.key為字尾名的檔案,公鑰儲存於以.csr結尾的檔案中。

.csr檔案中補充一些資訊比如有效期限等,頒發者,並用自己的私鑰對證書進行簽名。這樣就生成符合x.509格式的證書。

使用者收到證書後,在web伺服器(或負載均衡等裝置)上進行部署。

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

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

客戶端,比如瀏覽器會向服務端傳送請求,服務端為了證明自己的身份,會傳送證書給對方。

瀏覽器讀取證書的數字簽名部分,用自身根證書列表中對應的公鑰證書對其進行解密。如果解密成功,並且證書雜湊值與簽名內的雜湊值匹配一致,可證明站點提供的證書確實是該ca根證書簽發的,否則給出風險提示。

驗證通過之後,使用證書中的公鑰對隨機數和對稱加密演算法加密,傳送給服務端,服務端用私鑰進行解密,獲得金鑰和加密演算法。

服務端與瀏覽器後續通訊將會使用新的對稱加密演算法和隨機金鑰加密資訊。

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

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

對於dns劫持的情況還是無解的。比如瀏覽器訪問**的時候給了乙個假證書,然後向ca驗證證書的時候又訪問了乙個假**,證書就有可能被驗證通過。從而黑客可以作為中間方獲取並**雙方的資料。

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

證書生成的時候利用私鑰簽名,驗證證書的時候利用公鑰解密。

確認證書有效後,利用證書中的公鑰進行加密,服務端利用私鑰解密。

雙方使用新生成的隨機金鑰進行資料加解密。

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

通訊內容 確認身份

對稱加密 ssl證書 —— x.509 格式,非對稱加密

七個你可能不了解的CSS單位

我們很容易無法擺脫的使用我們所熟悉的css技術,當新的問題出現,這樣會使我們處於不利的地位。隨著web繼續的發展,對新的解決方案的需求也會繼續增大。因此,作為網頁設計師和前端開發人員,我們別無選擇,只有去了解我們的工具集並且熟悉它。這意味著我們還要了解一些特殊的工具 那些不經常使用的,但是當需要它們...

那些你可能不了解的公有雲風險成本

公有雲強調了給企業帶來的種種好處,但是它並不十全十美。企業應該意識到其不可 的成本結構以及其他的一些缺點。公有雲服務給予企業諸多優勢。他們允許靈活和經濟的虛擬機器部署並且可以提高乙個組織的資料備份和工作負載擴充套件能力。但是,公有雲並不是沒有缺點的。在了解公有雲優點之後,即本系列的第一篇文章,在進入...

你不了解的querySelector

概述返回當前文件中匹配乙個特定選擇器的所有的元素 使用深度優先,前序遍歷規則這樣的規則遍歷所有文件節點 返回的物件型別是 nodelist.elementlist document.queryselectorall selectors 下面的例子返回乙個文件中所有的class為 note 或者 al...