-
什麼是HTTPS
- 一言以蔽之:在建立HTTP連線之前做一次SSL / TLS 連線,之後的HTTP通訊在SSL的基礎上加密進行。
-
HTTPS和HTTP的區別有哪些
- HTTP明文傳輸內容,HTTPS加密傳輸
- HTTP不需要CA證書,HTTPS需要。
- HTTP常用埠80,HTTPS是443
- HTTPS因為要做一次SSL握手,所以速度慢一點
-
HTTPS的好處是什麼,有什麼優點
- 所有資訊加密傳播,第三方無法竊聽
- 資訊具有校驗機制,防止第三方篡改
- 配備身份證書,防止身份被冒充
-
HTTPS怎麼執行
-
服務端配置證書,證書就是一個公私鑰對。
-
SSL握手過程
-
簡陋版本:
- 客戶端向服務端索要+驗證公鑰
- 雙方協商生成session key
- 利用session key進行對稱加密下的通訊
-
詳細版本:
-
Client Hello,客戶端發起請求:客戶端向服務端傳送
- 支援的加密協議和對應版本。如TLS 1.0
- 一個由客戶端生成的隨機數A
- 支援的加密方法,比如RSA公鑰加密
- 支援的壓縮方法
-
Server Hello:服務端迴應,服務端傳送
- 確認使用的加密協議和版本,如果不支援客戶端發過來的協議and版本,伺服器會關閉該流程
- 一個由伺服器生成的隨機數B
- 確認伺服器使用的加密方法(可以理解為客戶端支援很多種,服務端使用其中一種)
- 伺服器證書
-
client reply:客戶端迴應,客戶端先驗證伺服器的證書,如果證書不可信則丟擲警告;如果證書正常,則客戶端從證書中提取伺服器公鑰,並向伺服器傳送
- 一個隨機數C,稱為pre-master key。至此,客戶端和服務端同時有了3個隨機數,雙方會使用事先商定的加密方法,各自生成本次session所用的session key。這把session key在兩端都是相同的
- 編碼改變通知。表示隨後的資訊都將用雙方商定的加密方法和金鑰傳送。
- 客戶端握手結束通知(相當於FIN),表示客戶端的握手階段已經結束。FIN的值等於前面傳送的所有內容的hash值,供伺服器校驗。
-
server reply:服務端最後迴應,服務端收到pre-master key後生成session key
- 編碼改變通知。表示隨後的資訊都將用雙方商定的加密方法和金鑰傳送。
- FIN,FIN的值等於前面傳送的所有內容的hash值,供客戶端校驗。
-
-
HTTP過程
- 就是普通的HTTP協議過程,只是用session key加密
-
-
常見問題
-
如何保證公鑰不被篡改
-
解決方法:將公鑰放在數字證書中。只要證書是可信的,公鑰就是可信的。
-
怎麼保證證書是真的呢?
- 一般是作業系統自帶的,所以提醒我們一定要買正版作業系統。
-
-
-
公鑰加密計算量很大,如何減少計算時間
- 解決方法:每一次對話(session),客戶端和伺服器端都生成一個"對話金鑰"(session key),用它來加密資訊。由於"對話金鑰"是對稱加密,所以運算速度非常快,而伺服器公鑰只用於加密"對話金鑰"本身,這樣就減少了加密運算的消耗時間。
-
為什麼生成session key要3個隨機數呢
- "不管是客戶端還是伺服器,都需要隨機數,這樣生成的金鑰才不會每次都一樣。由於SSL協議中證書是靜態的,因此十分有必要引入一種隨機因素來保證協商出來的金鑰的隨機性。對於RSA金鑰交換演算法來說,pre-master-key本身就是一個隨機數,再加上hello訊息中的隨機,三個隨機數通過一個金鑰匯出器最終匯出一個對稱金鑰。pre master的存在在於SSL協議不信任每個主機都能產生完全隨機的隨機數,如果隨機數不隨機,那麼pre master secret就有可能被猜出來,那麼僅適用pre master secret作為金鑰就不合適了,因此必須引入新的隨機因素,那麼客戶端和伺服器加上pre master secret三個隨機數一同生成的金鑰就不容易被猜出了,一個偽隨機可能完全不隨機,可是是三個偽隨機就十分接近隨機了,每增加一個自由度,隨機性增加的可不是一。"
-
HTTPS是絕對安全的嗎?如果不是,什麼情況下會遭到攻擊
-
如果關閉了證書驗證,則可能會遭受雙重中間人攻擊,那什麼是雙重中間人攻擊?
- 這裡應該上個圖
-
如果在SSL握手的時候資訊被嗅探到3個隨機數
-
-
TLS和SSL的關係是什麼,差異在哪裡
-
簡陋版本:TLS 1.0 = SSL 3.1,TLS總體比SSL更安全,TLS有更安全的MAC演算法,更嚴密的警報機制,
-
具體版本:
- SSL,secure socket layer,安全套接字層。是在網路層和應用層之間的一層協議(該複習下OSI 7層模型了) HTTP - SSL/TLS - TCP - IP
- TLS比SSL補充了更多的報警程式碼
- 在加密計算 session key (master secret)時採用的方式不同
- 填充:TLS支援填充密文塊長度任意整數倍的資料長度,而SSL只支援填充到最小整數倍
-
-
HTTPS怎麼做到資料防篡改和兩端的身份確認?
-
利用摘要演算法+數字簽名
-
摘要演算法:採用單項Hash函式將需要加密的明文“摘要”成一串固定長度(通常是128位)的密文,這一串密文又稱為數字指紋,它有固定的長度,而且不同的明文摘要成密文,其結果總是不同的,而同樣的明文其摘要必定一致。“數字摘要“是https能確保資料完整性和防篡改的根本原因。
-
數字簽名
- 定義:數字簽名技術就是對“非對稱金鑰加解密”和“數字摘要“兩項技術的應用,它將摘要資訊用傳送者的私鑰加密,與原文一起傳送給接收者。接收者只有用傳送者的公鑰才能解密被加密的摘要資訊,然後用HASH函式對收到的原文產生一個摘要資訊,與解密的摘要資訊對比。如果相同,則說明收到的資訊是完整的,在傳輸過程中沒有被修改,否則說明資訊被修改過,因此數字簽名能夠驗證資訊的完整性。
- 過程:明文 --> hash運算 --> 摘要 --> 私鑰加密 --> 數字簽名
- 數字簽名只能驗證資料的完整性,資料本身是否加密不屬於數字簽名的控制範圍
-
-
-
HTTPS中的session可複用嗎?如何恢復
-
是可以的,主要有2種方式
-
利用session ID
- session ID的思想很簡單,就是每一次對話都有一個編號(session ID)。如果對話中斷,下次重連的時候,只要客戶端給出這個編號,且伺服器有這個編號的記錄,雙方就可以重新使用已有的”對話金鑰”,而不必重新生成一把。
- session ID是目前所有瀏覽器都支援的方法,但是它的缺點在於session ID往往只保留在一臺伺服器上。所以,如果客戶端的請求發到另一臺伺服器,就無法恢復對話
-
利用session token
- 客戶端傳送一個伺服器在上一次對話中傳送過來的session ticket。這個session ticket是加密的,只有伺服器才能解密,其中包括本次對話的主要資訊,比如對話金鑰和加密方法。當伺服器收到session ticket以後,解密後就不必重新生成對話金鑰了。
-
-
-
-
參考資料
HTTPS入門級總結
相關文章
- pyFlink 入門總結
- vue 入門總結Vue
- React入門總結React
- Nuxt入門總結UX
- 測試入門總結
- JavaScript入門⑧-事件總結大全JavaScript事件
- docker入門知識總結Docker
- ElasticSearch極簡入門總結Elasticsearch
- 程式碼審計入門總結
- BootStrap基礎入門概述總結boot
- Docker快速入門總結筆記Docker筆記
- koa2入門使用總結
- python入門總結(資料分析方向)Python
- 爬蟲入門(HTTP和HTTPS)爬蟲HTTP
- Canal詳細入門實戰(使用總結)
- RabbitMQ由淺入深入門全總結(二)MQ
- RabbitMQ由淺入深入門全總結(一)MQ
- Python入門必備知識點總結Python
- python 語法總結:Python語法快速入門Python
- 【總結】10款Python爬蟲框架!Python入門Python爬蟲框架
- Web前端入門的學習路線總結Web前端
- React中文文件閱讀總結——快速入門React
- Redux中文文件閱讀總結——快速入門Redux
- [前端 · 面試 ]HTTP 總結(十一)—— HTTPS 概述前端面試HTTP
- Flutter 入門與實戰(三十六):Dio 篇章總結Flutter
- 入門前端一週年總結-我是如何快速入門前端的知識分享前端
- grafana初級入門Grafana
- 入門級前端教程前端
- HTTPS總結+相關面試問題解答HTTP面試
- HTTP 協議知識點總結(二)HTTPSHTTP協議
- 【總結】10大Python庫介紹!Python基礎入門Python
- Flutter 入門與實戰(六十五):Redux 總結篇FlutterRedux
- Python入門教程100天:Day05-練習總結Python
- Java註解(入門級)Java
- 入門級的Git操作Git
- YourSQLDba版本升級總結SQL
- SSH後門分析總結
- Java SPI機制總結系列之開發入門例項Java