HTTPS
? HTTPS(HyperText Transfer Protocol Secure),譯為:超文本傳輸安全協議
?常稱為HTTP over TLS、HTTP over SSL、HTTP Secure
?由網景公司于1994年首次提出

? HTTPS的默認埠號是443(HTTP是80)
? 現在在瀏覽器上輸入http://www.baidu.com
?會自動重定向到https://www.baidu.com
SSL/TLS
? HTTPS是在HTTP的基礎上使用SSL/TLS來加密報文,對竊聽和中間人攻擊提供合理的防護

? SSL/TLS也可以用在其他協議上,比如
?FTP → FTPS
?SMTP → SMTPS
? TLS(Transport Layer Security),譯為:傳輸層安全性協議
?前身是SSL(Secure Sockets Layer),譯為:安全套接層
? 歷史版本資訊
?SSL 1.0:因存在嚴重的安全漏洞,從未公開過
?SSL 2.0:1995年,已于2011年棄用(RFC 6176)
?SSL 3.0:1996年,已于2015年棄用(RFC 7568)
?TLS 1.0:1999年(RFC 2246)
?TLS 1.1:2006年(RFC 4346)
?TLS 1.2:2008年(RFC 5246)
?TLS 1.3:2018年(RFC 8446)
作業在哪一層

OpenSSL
? OpenSSL是SSL/TLS協議的開源實作,始于1998年,支持Windows、Mac、Linux等平臺
?Linux、Mac一般自帶OpenSSL
?Windows下載安裝OpenSSL:https://slproweb.com/products/Win32OpenSSL.html
? 常用命令
?生成私鑰:openssl genrsa -out mj.key
?生成公鑰:openssl rsa -in mj.key -pubout -out mj.pem
? 可以使用OpenSSL構建一套屬于自己的CA,自己給自己頒發證書,稱為“自簽名證書”
HTTPS的成本
? 證書的費用
? 加解密計算
? 降低了訪問速度
? 有些企業的做法是:包含敏感資料的請求才使用HTTPS,其他保持使用HTTP
?http://www.icbc.com.cn/
?https://mybank.icbc.com.cn/
HTTPS的通信程序
? 總的可以分為3大階段
① TCP的3次握手
② TLS的連接
③ HTTP請求和回應

TLS 1.2連接
大概有10個流程,圖中省略了中間產生的ACK確認

① Client Hello
?TLS的版本號
?支持的加密組件(Cipher Suite)串列
? 加密組件是指所使用的加密演算法及密鑰長度等
?一個亂數(Client Random)

② Server Hello
?TLS的版本號
?選擇的加密組件
? 是從接收到的客戶端加密組件串列中挑選出來的
?一個亂數(Server Random)

③ Certificate
?服務器的公鑰證書(被CA簽名過的)

④ Server Key Exchange
?用以實作ECDHE演算法的其中一個引數(Server Params)
? ECDHE是一種密鑰交換演算法
? 為了防止偽造,Server Params經過了服務器私鑰簽名

⑤ Server Hello Done
?告知客戶端:協商部分結束
? 目前為止,客戶端和服務器之間通過明文共享了
?Client Random、Server Random、Server Params
? 而且,客戶端也已經拿到了服務器的公鑰證書,接下來,客戶端會驗證證書的真實有效性

⑥ Client Key Exchange
?用以實作ECDHE演算法的另一個引數(Client Params)
? 目前為止,客戶端和服務器都擁有了ECDHE演算法需要的2個引數:Server Params、Client Params
? 客戶端、服務器都可以
?使用ECDHE演算法根據Server Params、Client Params計算出一個新的隨機密鑰串:Pre-master secret
?然后結合Client Random、Server Random、Pre-master secret生成一個主密鑰
?最后利用主密鑰衍生出其他密鑰:客戶端發送用的會話密鑰、服務器發送用的會話密鑰等

⑦ Change Cipher Spec
?告知服務器:之后的通信會采用計算出來的會話密鑰進行加密

⑧ Finished
?包含連接至今全部報文的整體校驗值(摘要),加密之后發送給服務器
?這次握手協商是否成功,要以服務器是否能夠正確解密該報文作為判定標準

⑨ Change Cipher Spec

⑩ Finished
?到此為止,客戶端服務器都驗證加密解密沒問題,握手正式結束
?后面開始傳輸加密的HTTP請求和回應

Wireshark解密HTTPS
? 設定環境變數SSLKEYLOGFILE(瀏覽器會將key資訊匯出到這個檔案)

? 設定完成后,最好重啟一下作業系統
? 在Wireshark中選擇這個檔案
?編輯 → 首選項 → Protocols → TLS

? 如果環境變數不管用,可以直接設定瀏覽器的啟動引數(下圖是使用了Rolan進行啟動)

配置服務器HTTPS-生成證書
? 環境:Tomcat9.0.34、JDK1.8.0_251
? 首先,使用JDK自帶的keytool生成證書(一個生成免費證書的網站: https://freessl.org/)
?keytool -genkeypair -alias mj -keyalg RSA -keystore F:/mj.jks
配置服務器HTTPS-配置tomcat
? 將證書*.jks檔案放到TOMCAT_HOME/conf目錄下

? 修改TOMCAT_HOME/conf/server.xml中的Connector

筆記內容大部分來自于小碼哥教育
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/339096.html
標籤:其他
上一篇:《軟體方法》第一章自測題
