架構師之路-https底層原理

程式設計一生發表於2021-10-28

引子

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

我搜尋了一下架構師的培訓課程,講什麼的也有。實際上是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、只有需要外部認證的證照有過期的概念,自己簽發的可以更新也可以不更新。可以通過向服務端發請求的獲取到證照,檢視證照是誰簽發的、有效期是哪天

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

 

推薦閱讀

一個請求過來都經過了什麼

兩個流程鏈路問題的排查和總結

穩定性三十六計-超時處理

漫畫:大公司都在重複造輪子嗎?

相關文章