Https
- Http協議
Http協議是目前應用比較多應用層協議,瀏覽器對于Http協議已經實現。Http協議基本的構成部分有
- 請求行 : 請求報文的第一行
- 請求頭 : 從第二行開始為請求頭內容的開始部分。每一個請求頭都是由K-V鍵值對組成。
- 請求體: 請求頭完成后以空行結束、從空行開始為請求體。
同理,Http響應也遵循上述基本結構
- 響應行:響應報文的第一行,主要包含了Http的版本、響應狀態碼。
- 響應頭:從第二行開始為響應頭內容的開始部分,每一個響應頭都是由K-V鍵值對組成。
- 響應體:服務器器所有的響應內容都在響應體中返回,當然有些請求可能也沒有響應體,例如302重定向請求。
所謂的協議就是 : 為了滿足計算機通信雙方可以正確的獲取數據,處理數據而約定好的一種格式,如果不遵守協議,則無法正確處理數據。例如Http協議的響應行沒有狀態碼,或者響應頭格式不正確等都會導致瀏覽器無法正確解析。
遵循了標準Http協議,瀏覽器和服務器則可以根據對方傳輸的信息做正確處理,瀏覽器也可以正確展示數據。
之前的版本Http協議都是在瀏覽器與服務器之間使用明文傳輸的,這種方式是不安全的,極度容易被中間人攻擊篡改傳輸的數據。于是Https協議誕生了。
- Https起源
- 對稱加密算法實現
既然Http協議是不安全的,那將傳輸的信息使用對稱加密算法加密過后再傳輸就可以避免被中間人攻擊了,但問題是,如何讓對稱加密的密鑰讓瀏覽器與服務器更安全的知道?如果瀏覽器直接將密鑰發給服務器,那還是有可能被攻擊者解惑,則后續再傳輸的任何信息都可以被輕松解密,所以對稱加密也是不安全的。
- 非對稱加密算法實現
非對稱加密算法有以下優勢:
- 有兩把密鑰,分為公鑰和私鑰,公鑰加密只能私鑰解密,而私鑰加密只能公鑰解密。
- 密鑰長度更長,破解難度更高。
- 攻擊者獲取一把密鑰無法實現對數據的加解密。
嘗試用非對稱加密算法來實現瀏覽器與服務器的安全通信
- 首先服務器把自己的公鑰發送給瀏覽器
- 瀏覽器用服務器的公鑰加密一串隨機數字
- 將加密后的密文發送給服務器,即使被中間人攻擊,由于私鑰只有服務器才有,也是無法解密的。
- 服務器拿到密文,用自己的私鑰進行解密,這樣就可以獲取到瀏覽器生成的隨機數,后續用這個隨機數進行對稱加密即可。
常用的非對稱加密實現算法有 RSA、DSA、SM2等。
絕大多數的非對稱加密算法都是基于數學問題去實現的,例如RSA算法基于超大質數分解,SM2基于橢圓曲線率等。 在可預見的時間范圍內,這幾種算法的安全性依然是相當高的。
SSL、TSL
- 非對稱加密潛在的問題
在使用了非對稱加密算法保證瀏覽器與服務器通信安全以后,似乎還是有一個問題沒有解決,那就是如果服務器發送給瀏覽器公鑰的過程中被中間人攔截,中間人替換成自己的公鑰發送給瀏覽器,那么瀏覽器再用假的公鑰加密隨機數,發給服務器,此時再度被中間人攻擊,由于瀏覽器加密用的是假的公鑰,所以攻擊者可以用自己的私鑰進行解密,然后再用瀏覽器的公鑰加密,發給瀏覽器,這個時候,攻擊者已經完全拿到的瀏覽器生成的隨機數了,那么后續雙方的通信也都可以被輕松破解。
- 問題解決
可以看到,根本的問題就是瀏覽器無法判斷服務器發過來的公鑰是不是服務器本身的還是被篡改的,此時就需要引入一個第三方機構了,這個第三方機構就是CA (Certificate Authority)。
服務器會像自己的域名信息、組織、主體以及最關鍵的公鑰整理好,向CA機構申請頒發證書,CA機構經過審核以后,用自己的私鑰對這些信息進行數字簽名,也就是先將信息進行消息摘要,然后對這個消息摘要進行加密,然后將CA的公鑰以及申請的信息打包成一個證書
CA會將證書下發給服務器。那么后續的通信過程是這樣的:
- 瀏覽器向服務器發送請求,服務器會將自己的證書發給瀏覽器。
- 瀏覽器首先根據證書上的CA機構的公鑰對密文進行解密,然后拿著解密的內容去比對證書上的數字簽名是否一致,如果不一致,則表示證書有問題。如果攻擊者篡改了篡改了服務器的公鑰,則瀏覽器再進行數字簽名驗證時,就會出現問題,此時會提示風險。
- 如果攻擊者也申請了一個證書來偽造,雖然可以正確解密出來,但兩個域名的證書內容是不可能相同的,所以也無法驗證成功,例如 訪問的是 www.bilibili.com,而證書上的域名是 www.bi1ibi1i.com,此時也會提示證書安全問題。
此時看似解決了安全問題,但現在的問題是,瀏覽器如何知道CA機構的公鑰不是被篡改過的呢?這就有點套娃了。
最簡單的辦法就是操作系統和瀏覽器直接內置了CA機構的公鑰信息,內置的方式避免了攻擊者篡改。
可以發現,上述將的瀏覽器和服務器的協商密鑰的過程是獨立于Http協議之外的,這一過成叫做
secure socket layer (安全套接字層),也就是 SSL,SSL經歷過多次迭代發展后有了SSL1.0、SSL2.0、SSL3.0,后來更名為TSL。
所以SSL、TSL是獨立于協議之外的一套安全機制,這一過程也稱作SSL握手。
除此之外,證書也設置有效期、定義更換算法以及密鑰也是提升安全性的一種方式。
- CA機構
Symantec:賽門鐵克(Symantec)SSL證書前身為 Verisign,后于2017年12月被DigiCert收購,現在已經使用 DigiCert 根證書。Symantec Secure Site SSL證書依然是各行業尤其是金融銀行證券等大型企業認可的品牌。Symantec Secure Site SSL證書 支持諾頓安全簽章,是網站擁有很好的可信度。
GeoTrust:是全球成長最快的數字證書頒發機構之一,在全球超過150個國家/地區頒發數百萬的數字證書。
Comodo:是全球知名的互聯網安全公司,為用戶提供網站安全防護、SSL證書、反病毒軟件等服務。
DigiCert:是全球領先的數字證書提供商,在SSL市場占有重要地位。DigiCert旗下擁有DigiCert、Symantec、Geotrust、Thawte、Rapid 5大SSL證書品牌,可以提供從基礎型到高端型全系列的SSL證書解決方案。
證書的基本信息有頒發者、頒發機構等等
同時,證書中還包含了服務器的公鑰、域名、CA機構的公鑰、簽名算法等等。