1 TLS協議簡介
1.1 簡介
TSL是傳輸層安全協議(Transport Secure Protocol)的簡稱,它的前身是SSL(Secure Sockets Layer)。TLS的設計目標是為互聯網通信提供安全保證,防止數據被竊聽,篡改。TLS協議由記錄層(TLS Record Layer)和握手層(TLS Handshake Layer)組成,記錄層處于協議的最低層,為TLS協議提供安全可靠的連接。TLS在協議棧中處于HTTP和TCP協議之間,但是TLS協議是獨立于應用層協議的,也就是說高層的應用層協議,如HTTP,FTP等都可以創建在TLS之上,TLS的下層可以是任何可靠傳輸層協議,如TCP,SPX等。
1.2 TLS的版本演進
TLS目前已發布的最新版本是TLS1.2,它在RFC5246中定義,其前身SSL1.0,SSL2.0和SSL3.0。SSL由于安全漏洞,已逐漸在被淘汰;TLS1.0和SSL3.0差異很小,幾乎等同,漸漸也不再使用,所以現在的話,只要注意TLS1.1以上的版本。
1.3 TLS握手過程
TLS分為記錄層協議和握手層協議:
記錄層協議(TLS Record Protocol):
記錄層協議負責將要發出的消息進行分片,壓縮,打上消息認證碼(MAC)并最終交到傳輸層;或將接收到的數據進行解壓,解密,數據校驗,重新 組裝后傳到上一層。
握手層協議(TLS Handshake Protocol):
握手層協議處于記錄層協議之上,握手層協議的作用是在真正的應用數據傳輸之前,使客戶端和服務器互相進行身份認證,協商加密算法以及生成加密密鑰。握手層用于協商出記錄層的參數。這些參數將會被記錄層用于雙方的身份認證,實例化協商的安全參數,錯誤報告。
TLS在協議棧中的位置:
TLS的協議棧位置TLS的握手過程:
1.客戶端發送ClientHello消息,包含可選密碼組件,一個客戶端生成的隨機數等,服務端接收后回一個ServerHello消息給客戶端,確定密碼方案,并生成一個服務器隨機數,發給客戶端。
這一步的數據傳輸在TCP上進行,數據都是公開的,中間人攻擊者可以很輕松的得到這些數據。
2.服務器發送證書,服務器的身份確認成功后;服務器可能會請求一個客戶端證書,要求客戶端進行身份認證,客戶端給服務器發出證書,驗明身份。這一步不是必須的。
3.客戶端向服務器發出摘要認證,確認接收的消息的完整性,保證沒有被第三方篡改。
4.雙方交換必需的加密參數。其中包括一個預主密鑰,客戶端會用服務器證書中的公鑰將這個密鑰加密傳給服務器,服務器使用私鑰進行解密。
5.客戶端生成一個預主密鑰,并使用服務器證書中的公鑰加密,服務器解密后生成一個主密鑰。雙方使用這個主密鑰(master secret)對應用層數據進行對稱加密(如AES256)。 主密鑰是客戶端和服務器共享的。
6.最后,把這些準備好的的安全參數交給記錄層協議。
下圖轉自維基百科TLS詞條 https://zh.wikipedia.org/wiki/%E5%82%B3%E8%BC%B8%E5%B1%A4%E5%AE%89%E5%85%A8%E5%8D%94%E8%AD%B0:
SSL_handshake_with_two_way_authentication_with_certificates.png會話恢復過程:
客戶端服務器出于性能的考慮,可能會恢復前面的會話,或復制一個當前存在的會話,而不是重新協商密碼參數,建立新的會話(4.2部分使用tcpdump跟蹤發現,這個過程確實是耗時占比很大)。
1.客戶端發出一個ClientHello消息,這個消息包含要恢復的會話的Session ID。
2.服務接到這個SessionID后,檢查它的緩存是否存在該會話ID。如果找到了,服務器將使用該會話狀態重建連接,并發一個ServerHello給客戶端,其中包含一個和ClientHello消息一模一樣的SessionID。
3.此時,協議規定,必須要雙方發出ChangeCipherSpec消息,并接著發出Finished消息確認握手完成。然后客戶端服務器就可以傳輸應用層數據了。
4.如果服務器沒有在緩存中找到Session ID,那么新的SessionID將會建立,然后又會執行一次完全握手。
--------------------------------------------------------------------------------
2 使用nginx搭建https服務器
2.1 環境準備
先搭建nginx,nginx的搭建在官網中可以找到 http://nginx.org/en/docs/install.html
注意如果是用源碼編譯,有的較老版本構建編譯時需要帶上參數--with-http_ssl_module,最新的nginx版本是默認有這個編譯參數的。
配置:

ssl_certificate : 存放服務器證書的地址,主要用于數字證書的身份認證。所有連到服務器的客戶端都能拿到這個證書;
ssl_certificate_key : 是私鑰,只能被服務器知道。
ssl_protocols, ssl_ciphers選項是可選的。
2.2 詳細操作步驟
下面嘗試在本地搭建一個簡單的https服務器,在443端口監聽。
大致步驟如下:
1.搭建一個nginx服務器;
2.使用openssl生成服務器私鑰,客戶端私鑰,服務器公鑰,客戶端公鑰;
3.生成CA根證書,為服務器證書和客戶端證書(可選)提供簽名服務;
4.生成服務器證書和客戶端證書,并請求CA的簽名;
5.在操作系統上信任我們偽造的服務器證書,這里沒有為客戶端生成證書;
6.隨便寫一個web服務,提供一個url返回一段靜態報文,讓nginx為它做一下代理,然后啟動這個web服務器;
7.測試。
以下是這些步驟的操作命令:
證書和私鑰生成完畢后,開始配置nginx(http部分從略);

配置完后,保存,在nginx根目錄下運行命令:
$ ./sbin/nginx -t -c conf/https_server.conf
nginx會測試一下配置文件 conf/https_server.conf
如果輸出下面的東西,表示配置沒什么格式問題了:
啟動nginx:
$ ./sbin/nginx -c conf/https_server.conf
這里我們搭建一個http服務器,在端口8887上監聽,使用nginx代理,在瀏覽器中訪問:
https://localhost/hello
返回:
2.3 信任證書:
瀏覽器中輸入
https://localhost:443
因為我們的根證書是自己簽發的,簽發機構是偽造的,不在瀏覽器的信任列表中。對于這種情況,不同的瀏覽器對此會有不同的表現,但主流的瀏覽器都會發出警告。下面提供了一種辦法,使瀏覽器信任證書。注意,這里只是為了測試,正常上網不要忽略瀏覽器的警告,輕易地信任不明來源的證書。
下面是在Mac下的Google Chrome中信任證書的操作步驟:
. 當瀏覽器提示連接不安全時,在瀏覽器的抓包工具中點到如下的界面:
圖4. 點按鈕:View Certificate
. 拖動證書的icon,拉到本地桌面上并雙擊它:
圖5:訪問https://www.baidu.com得到的服務器證書,僅舉例雙擊它打開系統的鑰匙串,將桌面證書拖拽到系統鑰匙串中,
雙擊打開,選擇『始終信任』
圖6
圖7
注:截圖的證書為測試時隨意生成的根證書;所有證書信任的辦法類似。
重啟瀏覽器后,再訪問https://localhost/hello ,會看到這樣的結果:
圖8
2.4 測試加密效果
現在,我們嘗試用抓包工具模擬中間人截取報文,看看能不能截取到報文:
在mac上我們使用charles進行抓包,結果如下,報文已經被加密,看到的內容都是亂碼:
圖9
嘗試用Charles進行一次中間人攻擊:偽造證書,在Charles上可以安全一個代理證書,具體操作參考這里:http://www.jianshu.com/p/7a88617ce80b,然后再訪問https://localhost/hello
這時瀏覽器會又提示我們連接不安全,這是因為TLS握手感知到了客戶端的證書來源不明,假如我們點擊高級,繼續訪問,忽略這個警告,那么我們會在抓包工具上看到這樣的畫面:
圖10
報文的內容成功被Charles竊聽了,所以,再次驗證了一點:如果正常上網瀏覽網頁,操作電子銀行等敏感信息時,不要隨便忽略瀏覽器的安全警告。
由于大多數人安全意識薄弱,很習慣地點繼續訪問不安全連接 ,所以就有了HSTS。
2.5 HSTS是什么
HSTS(HTTP Strict Transport Security),這是一個由IEEE發布的網絡安全策略機制,如果服務器增加了這種策略,那么就意味著要求客戶端必須使用https協議和服務器進行對話。
主流的瀏覽器都實現了HSTS策略。當TLS握手出現問題時,瀏覽器不會再訪問服務器。
百度的防火墻代理就實現了這個策略。訪問https://www.baidu.com ,在瀏覽器截取到的服務器響應頭中有一個Strict-Transport-Security字段 max-age=172800 。max-age是指HSTS的失效時間,單位是秒。
圖11
由于服務器響應頭增加了這個字段,瀏覽器就會履行一些HSTS的職責。假如我們采取抓包工具偽造一個未知證書,再去訪問域名,就會受到警告,嘗試讓瀏覽器忽略不安全的警告繼續訪問會被禁止,如下圖:
圖12
然而HSTS也不是絕對安全的。一方面原因在于Strict-Transport-Security的max-age會過期,瀏覽器是否強制HSTS策略取決于當前系統時間,它可能偽造;另一方面是因為首次訪問網址并不受HSTS保護。可見技術對安全的防護永遠是有限的,還需要用戶有足夠的安全意識進行自我保護。
3 實現https抓包
了解了https的原理之后,知道TLS的握手關鍵在身份認證這一步。HTTPS的數據傳輸可以類比成交談的雙方各自亮出身份證,然后用約定的暗號進行交流,這樣即時旁邊有人竊聽,也無法破解經過加密的信息。
測試時,我們通常會有抓取https包的需求。如果以為https已被加密,我們沒辦法抓到明文包,那這是不對的。抓包的原理通常是在通信雙方插一個中間代理,對原有的客戶端和服務器的請求進行來回轉發。如果要抓取https包,顯然,構造的代理必須有完成TLS握手的能力,所以代理工具一般需要支持ssl。有了TLS的握手能力,我們再設法使通信雙方相信代理的身份,就能實現https的抓包了。可以看到,https的數據安全關鍵點其實就是在數字證書上 ,因此也很容易理解為什么主流的瀏覽器都會警告用戶使用了來路不明的機構頒發的證書。
實現https抓包,具體操作方案就是:用一個支持ssl的代理,偽造一個ca證書,當通信雙方在TLS握手時發現有人竊聽時,設法讓他們相信代理的身份(這個過程就見2.3); 代理身份被信任了,就會發生這個過程: 客戶端和代理進行握手,請求數據發到代理上,由代理和服務器做TLS握手,并轉傳客戶端的請求數據;服務器加密報文應答,代理解密報文再用和客戶端協商的密碼方案加密報文,傳給客戶端,客戶端解密報文。
Charles抓包參看:http://www.jianshu.com/p/7a88617ce80b
4 HTTPS的性能
4.1 HTTPS與HTTP的性能評測對比
我們使用Jmeter來測試http和https的比較。
在遠程服務器上搭建一個http服務器,讓它返回一個簡單的靜態網頁:
然后使用nginx進行代理
關鍵詞標簽:
HTTPS測試服務器搭建及性能探究,HTTPS 服務器,ERP,ERP系統,ERP軟件,ERP系統軟件,ERP管理系統,ERP管理軟件,進銷存軟件,財務軟件,倉庫管理軟件,生產管理軟件,企業管理軟件,拓步,拓步ERP,拓步軟件,免費ERP,免費ERP軟件,免費ERP系統,ERP軟件免費下載,ERP系統免費下載,免費ERP軟件下載,免費進銷存軟件,免費進銷存,免費財務軟件,免費倉庫管理軟件,免費下載,
本文轉自:e-works制造業信息化門戶網
本文來源于互聯網,拓步ERP資訊網本著傳播知識、有益學習和研究的目的進行的轉載,為網友免費提供,并盡力標明作者與出處,如有著作權人或出版方提出異議,本站將立即刪除。如果您對文章轉載有任何疑問請告之我們,以便我們及時糾正。聯系方式:QQ:10877846 Tel:0755-26405298。(請勿發郵件,由于垃圾郵件眾多,有可能會被當作垃圾郵件處理掉,同時現在很用郵件處理事務了,郵件處理時效期為3天,如急件請直接QQ聯系。)
相關文章