https是在http協議基礎上加入加密處理和認證機制以及完整性保護,即http+加密+認證+完整性保護=https
https並非應用層的一種新協議,只是http通訊介面部分用ssl/tls協議代替而已。通常http直接和tcp通訊,當使用ssl時則演變成先和ssl通訊,再由ssl和tcp通訊。
所謂https,其實就是身披ssl協議這層外殼的http
對稱金鑰加密,又稱私鑰加密,即資訊的傳送方和接收方用同乙個金鑰去加密和解密資料。它的最大優勢是加/解密速度快,適合於對大資料量進行加密,但金鑰管理困難。
非對稱金鑰加密,又稱公鑰加密,它需要使用一對金鑰來分別完成加密和解密操作,乙個公開發布,即公開金鑰,另乙個由使用者自己秘密儲存,即私用金鑰。資訊傳送者用公開金鑰去加密,而資訊接收者則用私用金鑰去解密。
從功能角度而言非對稱加密比對稱加密功能強大,但加密和解密速度卻比對稱金鑰加密慢得多。
非對稱金鑰通訊過程
ssl/tls協議的基本思路是採用公鑰加密法,也就是說,客戶端先向伺服器端索要公鑰,然後用公鑰加密資訊,伺服器收到密文後,用自己的私鑰解密,但是這裡有兩個問題:
(1)、如何保證公鑰不被篡改?
解決方法:將公鑰放在數字證書中,只要證書是可信的,公鑰就是可信的。
(2)、公鑰加密計算量太大,如何減少耗用的時間?
解決方法:每一次對話(session),客戶端和伺服器端都生成乙個"對話金鑰"(session key),用它來加密資訊。由於"對話金鑰"是對稱加密,所以運算速度非常快,而伺服器公鑰只用於加密"對話金鑰"本身,這樣就減少了加密運算的消耗時間。
因此,ssl/tls協議的基本過程是這樣的:
客戶端向伺服器端索要並驗證公鑰。
雙方協商生成「對話金鑰」。
雙方採用「對話金鑰」進行加密通訊。
具體過程可參考下面的栗子
假定客戶端叫**麗絲,伺服器叫做鮑勃,整個握手過程可以用下圖說明
第一步,愛麗絲給出協議版本號、乙個客戶端生成的隨機數(client random),以及客戶端支援的加密方法,具體的加密方法可參考ssl證書背後的加密演算法。
第二步,鮑勃確認雙方使用的加密方法,並給出數字證書、以及乙個伺服器生成的隨機數(server random)。
第三步,愛麗絲確認數字證書有效,然後生成乙個新的隨機數(premaster secret),並使用數字證書中的公鑰,加密這個隨機數,發給鮑勃。
第四步,鮑勃使用自己的私鑰,獲取愛麗絲發來的隨機數(即premaster secret)。
第五步,愛麗絲和鮑勃根據約定的加密方法,使用前面的三個隨機數,生成"對話金鑰"(session key),用來加密接下來的整個對話過程。
1、客戶端發起https請求
使用者在瀏覽器裡輸入乙個https**,然後連線到server的443埠。
2、服務端的配置
採用https協議的伺服器必須要有一套數字證書,可以自己製作,也可以向組織申請,區別就是自己頒發的證書需要客戶端驗證通過,才可以繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面。
3、傳送證書
這個證書其實就是公鑰,只是包含了很多資訊,如證書的頒發機構,過期時間等等。
4、客戶端解析證書
這部分工作是由客戶端的tls來完成的,首先會驗證公鑰是否有效,比如頒發機構,過期時間等等,如果發現異常,則會彈出乙個警告框,提示證書存在問題。
(1)首先瀏覽器讀取證書中的證書所有者、有效期等資訊進行一一校驗
(2)瀏覽器開始查詢作業系統中已內建的受信任的證書發布機構ca,與伺服器發來的證書中的頒發者ca比對,用於校驗證書是否為合法機構頒發
(3)如果找不到,瀏覽器就會報錯,說明伺服器發來的證書是不可信任的。
(4)如果找到,那麼瀏覽器就會從作業系統中取出頒發者ca 的公鑰(多數瀏覽器開發商發布
版本時,會事先在內部植入常用認證機關的公開金鑰),然後對伺服器發來的證書裡面的簽名進行解密
(5)瀏覽器使用相同的hash演算法計算出伺服器發來的證書的hash值,將這個計算的hash值與證書中簽名做對比
(6)對比結果一致,則證明伺服器發來的證書合法,沒有被冒充
(7)此時瀏覽器就可以讀取證書中的公鑰,用於後續加密了
5、傳送加密資訊
這部分傳送的是用證書加密後的隨機值(私鑰),目的就是讓服務端得到這個隨機值,以後客戶端和服務端的通訊就可以通過這個隨機值來進行加密解密了。
6、服務端解密資訊
服務端用私鑰解密後,得到了客戶端傳過來的隨機值(私鑰),然後把內容通過該值進行對稱加密
7、傳輸加密後的資訊
這部分資訊是服務端用私鑰加密後的資訊,可以在客戶端被還原。
8、客戶端解密資訊
客戶端用之前生成的私鑰解密服務端傳過來的資訊,於是獲取了解密後的內容,整個過程第三方即使監聽到了資料,也束手無策。
https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
http是超文字傳輸協議,資訊是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。
http的連線很簡單,是無狀態的;https協議是由ssl+http協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。
什麼是http劫持?如何理解http劫持
學習網路安全方面的知識,我們常遇到一種典型的網路攻擊方式 dns劫持。也就是標題所說的http劫持。如何理解它呢?請繼續往下閱 在以前,我們登陸乙個 要輸入乙個 的ip 一段較長的數字組合 而不是網域名稱,乙個 對應乙個ip,就想乙個位置對應乙個位址一樣。很顯然,這種情況下要記住乙個 很難。於是人們...
這樣理解 HTTP,面試再也不用慌了
目錄 2 post 和 get 的區別 3 常見狀態碼 4 http 首部 8 二進位制傳輸 9 多路復用 10 header 壓縮 11 服務端 push 12 quic 13 dns 14 從輸入 url 到頁面載入完成的過程 http 協議是個無狀態協議,不會儲存狀態。先引入 和冪等的概念。指...
簡單理解HTTP和HTTPS
https特點 http與https的區別 什麼是http協議無狀態協議?怎麼解決http協議無狀態協議?常見的http相應狀態碼 運用與總結 超文字傳輸協議,是乙個基於請求與響應,無狀態的,應用層的協議,常基於tcp ip協議傳輸資料,網際網路上應用最為廣泛的一種網路協議,所有的www檔案都必須遵...