1.HTTP缺點
http是應用層協議
主要有這些不足
- 通訊使用明文(不加密),內容可能會被竊聽
- 不驗證通訊方的身份,因此有可能遭遇偽裝
- 無法證明報文的完整性,所以有可能已遭篡改
2.HTTPS是什麼
HTTP+ 加密 + 認證 + 完整性保護 =HTTPS
HTTPS 是身披 SSL 外殼的 HTTP ,SSL主要就做了加密、認證、完整性保護三件事
2.1加密
ssl裡面有三種加密方式
- 雜湊演算法用於生成摘要,
驗證完整性
- 非對稱加密用於加密身份,非對稱演算法需要公鑰私鑰,效能差
對稱加密用於加密通訊資訊,對稱加密只需要一個共享祕鑰,效能好
2.2認證
如何保證和客戶端通訊的是真正的服務端?
服務端可以起申請數字證書認證機構(CA) 認證
CA會用CA的私鑰把伺服器的公鑰,還有各種認證資訊一起加密成數字證書
然後客戶端用已經安裝的CA的公鑰去解密數字證書,如果資訊符合,即可完成認證。
我們看一下思否的https數字證書
2.3完整性保護
一段資訊,經過摘要演算法得到一串雜湊值,就是摘要(dijest)。
客戶端拿到資訊以後,對資訊生成一次摘要,拿到摘要A。如果該摘要和從數字簽名中解密出來的摘要B一樣,就證明資訊是完整的,沒有丟失
這個摘要就是數字簽名
數字簽名和數字證書區別
數字簽名是伺服器自己籤的,為了資訊完整性
數字證書是CA提供的,裡面有伺服器的公鑰和認證資訊,用於認證
3.具體通訊過程
3.1 客戶端傳送加密申請
客戶端向伺服器發起請求,請求中包含使用的協議版本號、以及客戶端支援的加密方法等。
3.2 服務端以證書回應
伺服器端接收到請求後,確認雙方使用的加密方法、並給出伺服器的證書
3.3 客戶端確定身份,拿到公鑰。生成隨機數給伺服器
客戶端確認伺服器證書有效後,生成一個新的隨機數,並使用數字證書中的公鑰,加密這個隨機數,然後發給伺服器。
3.4 伺服器收到隨機數
伺服器使用自己的私鑰,來解密客戶端傳送過來的隨機數
3.5 正式通訊
客戶端和伺服器端用隨機數生成共享祕鑰 相互加密通訊。
4.安裝https證書
- 先申請一個證書 個人的有免費的可以申請
- 然後下載證書
nginx資料夾裡面有這兩個證書 一個應該是 .key檔案 一個是.crt檔案 - 把該檔案移動到nginx相關位置
- 修改配置,並重啟
ssl_certificate "/etc/nginx/tlsconfig/1_yangkaiqiang.com_bundle.crt";
ssl_certificate_key "/etc/nginx/tlsconfig/2_yangkaiqiang.com.key"; - https配置成功,可以訪問了
5.面試題
- 什麼是https
- 數字證書是什麼
- https的特點
- https通訊過程
- https如何保證安全的