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

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

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