SSL/TLS 深入淺出

锅叔發表於2024-07-29

  SSL,https(HTTP over SSL), X.509, SSL 證書 ,證書申請 /匯入/簽發, 等名詞,想必有一定工作經驗的小夥伴,一定都會略有耳聞,或者至少也聽神邊大神唸叨過。雖然司空見慣,但是能夠比較系統理清其中關係,能夠從整體到區域性深入淺出講解下的人,估計至少也是十里挑一。反正沒人給我講,我只好自己梳理下。(注意本文不涉及密碼學原理以及SSL協議具體細節,但具備密碼學基礎,會有助於愉快閱讀)

  起因是公司最近在搞安全加固,想起了歷史原因用了很久的FTP服務,這東西眾所周知是明文的,裸奔的使用者名稱密碼,被監聽是分分鐘的事兒。於是尋思加個密吧,搜了下發現有個FTPS( FTP over SSL),很容易聯想到一個更常用的https(http over。SSL), 展開一搜還有各種 XXXX - over - SSL。 如SMTPS,POP3S, LDAPS等,於是問題來了,SSL到底是個啥東西,為啥可以被各種over。

  • SSL的由來

  我們從大家比較熟悉的http協議角度說起,HTTP這個協議(就是header,body,post get這些)是在大概1991年附近釋出,其設計初衷就是用來傳輸顯示網頁內容。這協議是明文的,明文的含義——就是你閱讀的網頁內容以及提交的,經過的每一個網路節點都可以知道傳輸的具體是啥內容。我猜早期的網頁既不動態,也不私密,也沒有個人相簿:-),所以為了簡單,http協議本身並沒有考慮加密機制。

  後來,WWW就火了,網路時代正式來臨,頁面功能越來越強大,支援動態化,可以為不同使用者提供不同內容,已經可以發個悄悄話,照片啥的了。這時自然就產生了加密需求。於是1994年有一個叫網景(Netscape)的公司,做瀏覽器的,開始琢磨怎麼加密http協議傳輸的網頁內容。琢磨著,琢磨著,就琢磨出了SSL協議,後來歷經完善,變成了標準,改了名字 目前叫TLS,至今廣泛使用。

  網景已乘黃鶴去,但對網際網路的發展和安全起了重要貢獻。

  • SSL 協議的制定

  SSL協議的制定目標是解決http傳輸的安全問題,目前仍在廣泛應用,可見網景制定的這個協議還是比較科學的。所謂天下文章一大抄,SSL也是借鑑了前人基礎,融會貫通而成。

  大約1976年,大洋彼岸的大壯,提出了非對稱加密,數字證書的概念。1977年,同樣遠在彼岸的小明,發明了實用的非對稱加密RSA演算法,標誌著公開金鑰加密的誕生(就是現在常提的公鑰,私鑰,非對稱啥的)。

  有了天才的大壯和小明,數字證書以及非對稱加密的相關理論已經完備,只待應用。於是在一些安全需求較高的專用內部網路(軍事,金融,企業)中,一些系統開始根據大壯和小明提供的思路,實現基於數字證書和非對稱加密演算法的身份認證與通訊加密功能。

  凡事都是先發明,再應用,再有標準(參照電池,先發明,再使用,再規定5號 ,7號電池啥規格)。基於數字證書和RSA演算法的加密機制,因為缺乏標準,導致出現各系統實現間的不相容,證書互不認可等問題。

  於是1988年誕生了一個叫做X.509的標準,定義了數字證書的欄位內容,比如應該有持有者的名稱、公鑰、有效期、序列號以及證書頒發機構(CA)的簽名等。這個標準的產生,也推動了CA的標準化和普及。

  X.509 標準僅定義了證書的欄位內容,而另外的一些檔案格式標準,則具體定義了證書檔案的儲存格式。如.pem .der .p12 .p7b等,這些就是我們在系統中可見的證書和私鑰的存在形式。

  基於以上,網景公司定義了在網際網路中,客戶端和伺服器進行網路通訊時,類似 傳送ABC 表示 請求證書,發DEF ,表示協商雙方都支援的密碼套件的,發XYZ,表示XXX。 這樣一個網路協議,將其命名為SSL/TLS。

  • XXX over ssl

  SSL(Secure Sockets Layer )為啥可以被各種over,Layer 顧名思義,SSL協議的作用主要是加解密,與具體傳輸資料無關,應用把資料扔給 SSL層後,細節就不太需要關心了。他自然會幫你加密好,傳送到目的地,解密好,再送達應用。所以所有的應用層協議,都是可以over SSL的。如http,FTP等。

  通訊的過程,大致都是先建立SSL通道,證書驗證好,對稱金鑰交換好。這個建立SSL通道的過程,概念上稱為——SSL協商握手。握手完成後,後續的通訊內容就都是加密的了。你應用層需要傳個 GET ,POST,Header,body 之類,還是按你應用層的協議來,該咋咋滴。所以你應用層是http 那就是 http over SSL. 如果是 ftp 就是FTP over ssl。

  舉一反三: 如果你自己寫了個聊天客戶端和伺服器,是否可以用你的自定義聊天協議來 LAOWANG over SSL 呢?

  • 實踐

  如何實踐應用 XXX over SSL。

  1. 向CA申請伺服器端ssl證書(x.509證書)——透過上面我門可以知道,x.509證書適用於,各種的 https ftps pop3s laowangs . 以及其他依賴於x509證書的領域,如電子簽章。注意,我門有時候會說 https 證書,ssl證書,ftps證書,本質都是x509證書,習慣稱為ssl證書,不要混淆。

  2. 在伺服器端將申請到的證書及對應私鑰放置好,並配置啟動SSL支援——這是ssl協議通訊的基礎。證書雖然都是x.509證書,但具體的證書檔案可能需要格式轉換,nginx傾向於使用PEM檔案格式的證書(.pem)和私鑰。

  3. 申請客戶端證書(可選)——我也是剛知道不久,原來ssl協議是支援雙向認證的。Web瀏覽器模式使用的是單向認證,但在一些安全需求較高的應用,可能會需要進行雙向認證,伺服器可以驗證客戶端的證書是否有效,並且根據證書資訊如持有人,決定是否可以進行連線。

  4.客戶端對應使用支援SSL的客戶端進行通訊。  

  ok,寫到這裡拜了個拜~
  *關於密碼學基礎,在我的其他網路安全相關文章中,有簡要介紹,歡迎參考