web安全相當重要,https勢在必行。https就是web服務的盔甲,防止http裸奔,承擔了web傳輸內容不被第三方竊取和篡改的重任。web
最簡單來講,https就是加密的http。https在http和tcp協議層中間加了ssl/tsl層,做用就是給http傳輸內容加密。算法
如今的基本狀況是這樣,密碼的算法是衆所周知的,保密的關鍵在於密鑰。瀏覽器
首先,服務器要和衆多的web客戶端通訊,二者必須擁有一套匹配的密鑰。安全
web客戶端須要知道對稱密鑰或者公鑰,它從何地獲取?它只能從服務器獲取了,也就是說服務器會把密鑰發送給web客戶端。在發送密鑰的過程是爲了後續加密用的,這自己是沒有加密的,這個就會形成密鑰泄露啊,這個怎麼解決?服務器
咱們想起來非對稱加密系統中的公鑰原本就是公開的,它泄密了無所謂,因此這裏咱們能夠採用非對稱加密系統,服務器把公鑰發送給web客戶端。而後web客戶端用公鑰加密傳輸內容,發送給客戶端,由客戶端私鑰解密。而服務器用私鑰加密傳輸內容,客戶端用公鑰解密。可是這種方案有兩個致命問題:tcp
首先,咱們來解決第一個問題,狀況是這樣,web客戶端用公鑰加密的內容,第三方沒法破解;而服務器用私鑰加密的內容,第三方能夠破解。那咱們能夠利用web客戶端用公鑰加密的內容,第三方沒法破解的特色,在客戶端收到正確的密鑰後,隨機生成一個新的對稱密鑰,經過公鑰加密後,傳輸給服務器。這樣客戶端和服務器就用了一個共享的對稱密鑰,以後就能夠經過這個對稱密鑰去加密通訊了。並且對稱密鑰的加密性能一般是大大優於非對稱加密。這其實是利用非對稱加密系統創建了一條web客戶端到服務器的單向安全通道,而後利用該安全通道,傳輸私密的對稱密鑰來解決這個問題。web安全
第二個問題須要解決web客戶端收到的公鑰究竟是不是真正的服務器發出的公鑰。也就是要確認發送方是否爲服務器,且發送的內容沒有被篡改。咱們能夠想一下實際生活中,咱們怎麼確保寫信人的身份?咱們通常會用簽名或者按手印的方式,這種方式知足兩個特色:性能
只要知足這兩個條件,咱們就能夠肯定寫信人的身份。那服務器做爲寫信人,有什麼惟一且不可模仿的東西那?那就是私鑰!固然了,咱們不可能直接傳輸私鑰,可是用私鑰加密的數據,也是具備惟一性的,能夠惟一標識服務器,且私鑰只有服務器知道,私鑰加密的數據不可模仿和篡改。用私鑰加密的內容通常是服務器的相關信息。這就是所謂的數字簽名,能夠惟一標識做者,且不可篡改。編碼
可是服務器的私鑰加密的內容,只有服務器公鑰能夠解開,而客戶端並不知道公鑰,這個簽名其實就是爲了給客戶端傳送公鑰,這不是自相矛盾了嗎。。。本身解決不了的問題就須要政府出面了,政府機構能夠給你辦身份證,證實你就是你。咱們能夠經過受信任的第三方證書頒發機構(CA)給服務器辦法證書,標識服務器的身份。證書通常包含如下信息:加密
數字證書中包含服務器的信息及其數字簽名,數字簽名是由頒發機構私鑰加密證書其餘內容獲得的。而瀏覽器會預先安裝不少簽名頒發機構的證書,證書中包含簽名頒發機構的公鑰和相關信息。大部分的瀏覽器都會對數字證書進行簡單的完整性校驗,步驟以下:
瀏覽器請求某個web資源時,它會檢查url前綴:
加密的https事物過程以下:
SSL握手的具體過程以下:
https就是加密的http,採用非對稱密鑰系統、數字證書、數字簽名協商公鑰,而後經過公鑰加密傳遞對稱密鑰,由對稱密鑰加密傳輸請求內容。