架構師之路 - https 底層原理

引子

先說說我對架構師的理解。從業務能力上,需要的是發現問題和解決問題的能力;從團隊建設上,需要的是能培養團隊的業務能力;從項目管理上,把控好整個項目和軟件產品的全生命週期。

我搜索了一下架構師的培訓課程,講什麼的也有。實際上是 Java 從入門到精通的課也冠名架構師課程;講持久層框架的也冠名架構師課程;講組件、中間件的也冠名架構師課程;講分佈式系統設計的也冠名架構師課程。個人意見哈,內容其實沒有什麼問題,但是課程開始之前至少讓大家有個整體的視圖:

熟悉 https 等常用技術的底層原理,可以增強解決實際問題的能力,作出正確的決策。舉個例子:

接到安全團隊的指令,要求各個團隊梳理域名是否存在證書將要到期的安全風險。怎麼來給團隊下發具體任務呢?這個問題在文章最後總結並回答。

簡單入門

先來回答下面兩個問題:

1、大家都知道使用 https 協議傳輸默認使用 443 端口,那什麼情況下必須使用 443,什麼情況下不使用 443?

大家想一下端口的本質是什麼。其實端口有兩種,一種是物理端口,比如集線器、路由器的端口。大學的時候記得有門課叫集成電路,裏面有講到過。另一種是邏輯端口,是 TCP/IP 協議的端口,也常叫網絡端口。本質上一個端口是用來綁定服務的,那服務器用監聽什麼端口,客戶端就要向哪個端口發起請求。我們自己也可以寫個簡單的例子,寫過這個例子應該很容易就能明白。《懂了!國際算法體系對稱算法 DES 原理》也有完整的例子。

簡單點說服務端可以自己決定什麼端口提供服務。但是呢,大家各自爲政,記憶起來麻煩也不便於端口管理。所以邏輯端口也進行了劃分。其中 0~1023 是公認端口,比如 80 就默認是 http 的端口、443 就是 https 的端口。這樣約定好了,就不需要特殊來記了。所以一些對全人類開發的公網網站,就是用的默認端口。但是你自己或者公司內部用的或者和合作方商量好的,也可以用其他端口,只要服務提供方認就行。

2、使用 443 的端口的同時,80 端口還會用嗎?

這就是涉及到 https 的本質了。https 本質是 http 協議上加了一個安全層。安全層做了一些處理,http 要做的事情一點也沒有減少。就相當於在藥粒外加了一層膠囊,本質上起作用的還是藥粒呀;快遞送來的海鮮放在保鮮箱裏還加了保鮮袋本質還是買的海鮮呀。所以當然要用啦。

安全層原理

既然 https 協議本質只是 http 上加了安全層,本文就主要將安全層是怎麼實現的。當然要靠加密。加密又分成對稱加密和非對稱加密。要使用對稱加密,客戶端和服務端要有一個相同的祕鑰,這個祕鑰怎麼能安全的傳輸就成了問題。非對稱加密是公鑰只能用來加密,私鑰只能用來解密。那服務端自己存私鑰,客戶端來請求的時候,服務端把公鑰發給它就可以了。

那有的朋友就問了,那別的客戶端來請求是不是也拿到的是同一個公鑰呀,信息就不安全了呀。沒錯,同一個服務端給所有的客戶端返回的是相同的公鑰。但是威脅網絡安全的黑客需要是截獲信息,不是公鑰。信息發送方用公鑰把信息加密了,黑客沒有私鑰解不開。他能拿到公鑰和密文,想解開那就只能暴力破解,把所有語言文字的組合用公鑰試一下看看和截獲到的密文是不是一樣的。如果用常用的 RSA2048 的話,要 80 年。

總之,非對稱加密是比較安全的,但是它慢。通常加解密速度是對稱加密的幾百倍,信息大了速度還會快速下降。所以 https 協議是用非對稱加密溝通一個對稱祕鑰。真正的信息就用對稱祕鑰來加解密了。

CA 證書

很多人都聽過網絡抓包吧。抓包的原理和黑客截獲信息差不多,都是自己作爲一個代理。客戶端 B 想訪問 C 網站,黑客 D 發現了。D 就僞裝成了 C 把自己的公鑰發給了 B。B 發請求 “我是 B,我的提貨卡號碼是 XBXB” 到網站 C 時,黑客 D 截獲了這個信息,用自己的私鑰解開,之後把數據篡改成 “我是 D,我的提貨卡號碼是 XBXB” 發給網站 C。於是本來 B 的東西就被 D 領走了。抓包也是這種充當代理的原理。

爲了防止這一問題。客戶端就需要在收到公鑰的時候做一下判斷,信任的公鑰才使用。於是出現了一些大家都很認可的組織,它們可以頒發公鑰。

打個比方,在唐朝,賀知章賀老可謂是少有的文壇官場雙得意的代表,“二月春風” 沒少光顧他家。從 7 品官做到 3 品大員,是皇帝的老鐵,爲國服務 50 年後退休皇帝了還送豪宅,後來還被追封禮部尚書。《長安十二時辰》裏那個 80 多的老頭何監就是影射的賀知章,因爲他退休前的官職就是監事,人稱賀監。不少詩壇大家就是受了他的推薦才與皇帝建立了通信成爲了公務員。所以,賀監還有一個身份是 “大唐最佳星探”。

這裏賀監就是大家都認可的組織,在賀監 80 多歲的時候,40 多歲的李白找到賀監,請求他給自己簽發一份公鑰。賀監就用自己的私鑰給他做了簽發寫了推薦信,不僅如此,還金龜換酒傳爲佳話。皇帝想選公務員,李白拿出了賀監的推薦信。皇帝一看,確實是賀監的筆跡,馬上就給李白封了公務員。

這裏提一下,很多時候 https 抓包可以成功,原理是客戶端很多時候並不驗證證書的合法性。有個選項 check=false。那至於哪些是認證機構,這個是系統預裝的。可以在 IE 瀏覽器的 internet 選項裏查到預裝的證書。在中國,很多金融機構,它們的認證機構是央行。這些證書都是有有效期的,有的三年一簽發、有的五年一簽發。

上面圖中有顯示,證書除了公鑰信息,還有數字簽名信息。數字簽名當然需要有信息來進行簽名,具體信息就是我們在生成密鑰時需要輸入的那些,如下圖:

總結

回答開頭的問題:

接到安全團隊的指令,要求各個團隊梳理域名是否存在證書將要到期的安全風險。怎麼來給團隊下發具體任務呢?

1、要梳理的是提供 https 服務的服務端,只有服務端纔會需要找認證機構簽發證書

2、只有需要外部認證的證書有過期的概念,自己簽發的可以更新也可以不更新。可以通過向服務端發請求的獲取到證書,查看證書是誰簽發的、有效期是哪天

架構師經常面臨着需要做出正確的決策,比如連續幾天團隊都在執行生產程序發佈,但是後面幾天大家有紀律渙散的趨勢,這時候應該敏銳的察覺到並及時指出並糾正。這些都需要對原理或者事情的走向有深刻的認知才能做出正確和及時的判斷。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/1VwZQJ3sd3AwcB0E1dW-wg