日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

HTTPS 原理解析

發(fā)布時(shí)間:2023/11/29 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTTPS 原理解析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://www.cnblogs.com/zery/p/5164795.html

一 前言

  在說(shuō)HTTPS之前先說(shuō)說(shuō)什么是HTTP,HTTP就是我們平時(shí)瀏覽網(wǎng)頁(yè)時(shí)候使用的一種協(xié)議。HTTP協(xié)議傳輸?shù)臄?shù)據(jù)都是未加密的,也就是明文的,因此使用HTTP協(xié)議傳輸隱私信息非常不安全。為了保證這些隱私數(shù)據(jù)能加密傳輸,于是網(wǎng)景公司設(shè)計(jì)了SSL(Secure Sockets Layer)協(xié)議用于對(duì)HTTP協(xié)議傳輸?shù)臄?shù)據(jù)進(jìn)行加密,從而就誕生了HTTPS。SSL目前的版本是3.0,被IETF(Internet Engineering Task Force)定義在RFC 6101中,之后IETF對(duì)SSL 3.0進(jìn)行了升級(jí),于是出現(xiàn)了TLS(Transport Layer Security) 1.0,定義在RFC 2246。實(shí)際上我們現(xiàn)在的HTTPS都是用的TLS協(xié)議,但是由于SSL出現(xiàn)的時(shí)間比較早,并且依舊被現(xiàn)在瀏覽器所支持,因此SSL依然是HTTPS的代名詞,但無(wú)論是TLS還是SSL都是上個(gè)世紀(jì)的事情,SSL最后一個(gè)版本是3.0,今后TLS將會(huì)繼承SSL優(yōu)良血統(tǒng)繼續(xù)為我們進(jìn)行加密服務(wù)。目前TLS的版本是1.2,定義在RFC 5246中,暫時(shí)還沒(méi)有被廣泛的使用 ()

概念可參考百科

http://baike.baidu.com/link?url=M8pBu1j_22f0PW6izvAOCTjhepyRcT320U9LDmjyzb586OYS_aBALxfqIGVca1V-8MJeSl3bTUEOThMuwpamPK

?

?

二 ?HTTPS 驗(yàn)證原理

  Https在真正請(qǐng)求數(shù)據(jù)前,先會(huì)與服務(wù)有幾次握手驗(yàn)證,以證明相互的身份,以下圖為例

?

?

?

2.1 ?驗(yàn)證流程

?

?注:文中所寫的序號(hào)與圖不對(duì)應(yīng)但流程是對(duì)應(yīng)的

1?客戶端發(fā)起一個(gè)https的請(qǐng)求,把自身支持的一系列Cipher Suite(密鑰算法套件,簡(jiǎn)稱Cipher)發(fā)送給服務(wù)端

?

2??服務(wù)端,接收到客戶端所有的Cipher后與自身支持的對(duì)比,如果不支持則連接斷開(kāi),反之則會(huì)從中選出一種加密算法和HASH算法

? ?以證書(shū)的形式返回給客戶端 證書(shū)中還包含了 公鑰 頒證機(jī)構(gòu) 網(wǎng)址 失效日期等等。

?

3?客戶端收到服務(wù)端響應(yīng)后會(huì)做以下幾件事

? ? 3.1?驗(yàn)證證書(shū)的合法性? ??

   ?頒發(fā)證書(shū)的機(jī)構(gòu)是否合法與是否過(guò)期,證書(shū)中包含的網(wǎng)站地址是否與正在訪問(wèn)的地址一致等

? ? ? ? 證書(shū)驗(yàn)證通過(guò)后,在瀏覽器的地址欄會(huì)加上一把小鎖(每家瀏覽器驗(yàn)證通過(guò)后的提示不一樣 不做討論)

? ?3.2 生成隨機(jī)密碼

? ? ? ? 如果證書(shū)驗(yàn)證通過(guò),或者用戶接受了不授信的證書(shū),此時(shí)瀏覽器會(huì)生成一串隨機(jī)數(shù),然后用證書(shū)中的公鑰加密。       

? ? 3.3 HASH握手信息

? ? ? ?用最開(kāi)始約定好的HASH方式,把握手消息取HASH值, ?然后用 隨機(jī)數(shù)加密 “握手消息+握手消息HASH值(簽名)” ?并一起發(fā)送給服務(wù)端

? ? ? ?在這里之所以要取握手消息的HASH值,主要是把握手消息做一個(gè)簽名,用于驗(yàn)證握手消息在傳輸過(guò)程中沒(méi)有被篡改過(guò)。

?

4??服務(wù)端拿到客戶端傳來(lái)的密文,用自己的私鑰來(lái)解密握手消息取出隨機(jī)數(shù)密碼,再用隨機(jī)數(shù)密碼?解密 握手消息與HASH值,并與傳過(guò)來(lái)的HASH值做對(duì)比確認(rèn)是否一致。

? ? 然后用隨機(jī)密碼加密一段握手消息(握手消息+握手消息的HASH值 )給客戶端

?

5??客戶端用隨機(jī)數(shù)解密并計(jì)算握手消息的HASH,如果與服務(wù)端發(fā)來(lái)的HASH一致,此時(shí)握手過(guò)程結(jié)束,之后所有的通信數(shù)據(jù)將由之前瀏覽器生成的隨機(jī)密碼并利用對(duì)稱加密算法進(jìn)行加密 ?

? ? ?因?yàn)檫@串密鑰只有客戶端和服務(wù)端知道,所以即使中間請(qǐng)求被攔截也是沒(méi)法解密數(shù)據(jù)的,以此保證了通信的安全

??

非對(duì)稱加密算法:RSA,DSA/DSS ? ? 在客戶端與服務(wù)端相互驗(yàn)證的過(guò)程中用的是對(duì)稱加密?
對(duì)稱加密算法:AES,RC4,3DES ? ? 客戶端與服務(wù)端相互驗(yàn)證通過(guò)后,以隨機(jī)數(shù)作為密鑰時(shí),就是對(duì)稱加密
HASH算法:MD5,SHA1,SHA256 ?在確認(rèn)握手消息沒(méi)有被篡改時(shí)?

?

?

2.2??客戶端如何驗(yàn)證 證書(shū)的合法性?

?

1. 驗(yàn)證證書(shū)是否在有效期內(nèi)。

  在服務(wù)端面返回的證書(shū)中會(huì)包含證書(shū)的有效期,可以通過(guò)失效日期來(lái)驗(yàn)證 證書(shū)是否過(guò)期

2. 驗(yàn)證證書(shū)是否被吊銷了。

  被吊銷后的證書(shū)是無(wú)效的。驗(yàn)證吊銷有CRL(證書(shū)吊銷列表)和OCSP(在線證書(shū)檢查)兩種方法。

證書(shū)被吊銷后會(huì)被記錄在CRL中,CA會(huì)定期發(fā)布CRL。應(yīng)用程序可以依靠CRL來(lái)檢查證書(shū)是否被吊銷了。

CRL有兩個(gè)缺點(diǎn),一是有可能會(huì)很大,下載很麻煩。針對(duì)這種情況有增量CRL這種方案。二是有滯后性,就算證書(shū)被吊銷了,應(yīng)用也只能等到發(fā)布最新的CRL后才能知道。

增量CRL也能解決一部分問(wèn)題,但沒(méi)有徹底解決。OCSP是在線證書(shū)狀態(tài)檢查協(xié)議。應(yīng)用按照標(biāo)準(zhǔn)發(fā)送一個(gè)請(qǐng)求,對(duì)某張證書(shū)進(jìn)行查詢,之后服務(wù)器返回證書(shū)狀態(tài)。

OCSP可以認(rèn)為是即時(shí)的(實(shí)際實(shí)現(xiàn)中可能會(huì)有一定延遲),所以沒(méi)有CRL的缺點(diǎn)。

?

3. 驗(yàn)證證書(shū)是否是上級(jí)CA簽發(fā)的。


windows中保留了所有受信任的根證書(shū),瀏覽器可以查看信任的根證書(shū),自然可以驗(yàn)證web服務(wù)器的證書(shū), 是不是由這些受信任根證書(shū)頒發(fā)的或者受信任根證書(shū)的二級(jí)證書(shū)機(jī)構(gòu)頒發(fā)的(根證書(shū)機(jī)構(gòu)可能會(huì)受權(quán)給底下的中級(jí)證書(shū)機(jī)構(gòu),然后由中級(jí)證書(shū)機(jī)構(gòu)頒發(fā)中級(jí)證書(shū)) 在驗(yàn)證證書(shū)的時(shí)候,瀏覽器會(huì)調(diào)用系統(tǒng)的證書(shū)管理器接口對(duì)證書(shū)路徑中的所有證書(shū)一級(jí)一級(jí)的進(jìn)行驗(yàn)證,只有路徑中所有的證書(shū)都是受信的,整個(gè)驗(yàn)證的結(jié)果才是受信

三 ?手機(jī)如何抓取HTTPS的請(qǐng)求數(shù)據(jù)

當(dāng)站點(diǎn)由HTTP轉(zhuǎn)成HTTPS后是更安全了,但是有時(shí)候要看線上的請(qǐng)求數(shù)據(jù)解決問(wèn)題時(shí)卻麻煩了,因?yàn)槭荋TTPS的請(qǐng)求,你就算攔截到了那也是加密的數(shù)據(jù),沒(méi)有任何意義。 那有方法解決嗎? 答案是肯定的! 接下來(lái)就來(lái)個(gè)實(shí)例教程,教大家如何查看HTTPS的請(qǐng)求數(shù)據(jù) 首先需要安裝Fiddler 用于攔截請(qǐng)求,和頒發(fā)https證書(shū) 3.1 ?Fiddler根證書(shū)導(dǎo)出 按圖中操作把導(dǎo)出,再將導(dǎo)出的的根證書(shū)"FiddlerRoot.cer" 的后輟名 改為"crt" ?"FiddlerRoot.crt" 因?yàn)槭謾C(jī)沒(méi)法直接安裝 cer格式的證書(shū) 3.2 ?證書(shū)安裝 在本機(jī)把證書(shū)移到本機(jī)IIS中的某個(gè)網(wǎng)站的物理目錄中,然后在手機(jī)瀏覽器中訪問(wèn)該證書(shū)的目錄 如:"192.168.0.102:8001/FiddlerRoot.crt" 如圖 此時(shí)手機(jī)會(huì)提示按裝根證書(shū),其實(shí)安裝一個(gè)不受信的根證書(shū)是非常危險(xiǎn)的,如果你安裝了某些釣魚(yú)網(wǎng)站或者有危害的根證書(shū),那只要是該根證書(shū)下的所有證書(shū)都會(huì)驗(yàn)證通過(guò), 那隨便一個(gè)釣魚(yú)網(wǎng)的網(wǎng)站只要安裝了該根證書(shū)下的證書(shū),都不會(huì)有任何警告提示。 很可能讓用戶有財(cái)產(chǎn)損失。所以在安裝根證書(shū)時(shí),手機(jī)系統(tǒng)會(huì)要求你輸入鎖屏密碼,以確保是本人操作。 安裝過(guò)程如下 Fiddler的根證書(shū)名字都提示了是不受信的根證書(shū) 安裝完成 3.3 ?通過(guò)Fiddler抓取手機(jī)的HTTPS請(qǐng)求 Fiddler默認(rèn)偵聽(tīng)的端口是8888,把手機(jī)WiFI的Http 代理設(shè)為本機(jī)Fiddler的地址如下圖 這樣手機(jī)上所有的請(qǐng)求都會(huì)先通過(guò)Fiddler,Fiddler再轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器 注意: 在家中的路由器中有線與無(wú)線通常不在一個(gè)網(wǎng)段,會(huì)導(dǎo)致Fiddler無(wú)法抓到手機(jī)的包,需要手動(dòng)設(shè)置路由,可自行百度 代理也設(shè)好之后便可以開(kāi)始抓到Https的請(qǐng)求內(nèi)容了如圖 Https的默認(rèn)端口號(hào)是 “443”可以看出紅框中的是未裝根證書(shū)前的請(qǐng)求,加了一把小鎖,而且請(qǐng)求記錄都是灰色的 而安裝證書(shū)后請(qǐng)求則一切正常,請(qǐng)求內(nèi)容也都可以正常看到。 3.4 ?為什么安裝了Fiddler根證書(shū)可以看到Https請(qǐng)求內(nèi)容 要解釋這個(gè)問(wèn)題,就需要了解最開(kāi)始的Https的驗(yàn)證原理了,回顧一下,先是客戶端把自己支持的加密方式提交到服務(wù)端,然后服務(wù)端 會(huì)返回一個(gè)證書(shū) 到這一步問(wèn)題來(lái)了,手機(jī)未什么要安裝Fiddler的證書(shū)呢? 第一?因?yàn)镕iddler在客戶端(手機(jī))發(fā)出Https請(qǐng)求時(shí),充當(dāng)了服務(wù)器的角色,需要返回一個(gè)證書(shū)給客戶端, 但是Fiddler的證書(shū)并不是CA機(jī)構(gòu)頒發(fā)的,客戶端一驗(yàn)證就知道是假的連接肯定就斷了,那怎么辦呢? 那就想辦法讓客戶端信任這個(gè)服務(wù)端,于是就在客戶端安裝一個(gè)Fiddler的根證書(shū)。 所以只要是通過(guò)Fiddler的Https請(qǐng)求,驗(yàn)證根證書(shū)時(shí)自然會(huì)通過(guò),因?yàn)镕iddler的根證書(shū)你已經(jīng)受信了! 第二 現(xiàn)在只是客戶端(手機(jī))和Fiddler這個(gè)偽服務(wù)端的Https驗(yàn)證通過(guò)了,還沒(méi)有到真正的服務(wù)端去取數(shù)據(jù)的,此時(shí)Fiddler會(huì)以客戶端的身份與真正的服務(wù)端再進(jìn)行一次HTTPS的驗(yàn)證,最后拿到數(shù)據(jù)后 又以服務(wù)端的身份與客戶端(手機(jī))通信。也就是說(shuō)在一次請(qǐng)求中數(shù)據(jù)被兩次加解密,一次是手機(jī)到Fiddler,一次是Fiddler到真正的服務(wù)端。 整個(gè)過(guò)程 ?手機(jī)----》Fiddler----》 服務(wù)器 ?Fiddler 即充當(dāng)了服務(wù)端又充當(dāng)了客戶端,才使得數(shù)據(jù)能夠正常的交互,這個(gè)過(guò)程中最重要的一環(huán)就是手機(jī)端安裝的 根證書(shū)!

四 ?總結(jié)

寫了這么多,其實(shí)也只是把Https的基本流程寫清楚了一部分,這其中每一個(gè)步驟深入下去都是一門學(xué)科,而對(duì)于我們而言,能清楚其大致運(yùn)作流程,做到心中有數(shù)據(jù)就算可以了, Https在目前的網(wǎng)絡(luò)數(shù)據(jù)安全傳輸占據(jù)著重要地位,目前可能也沒(méi)有更優(yōu)的方案來(lái)代替Https。另外一定要注意 不要隨便安裝不確定的的根證書(shū),以免帶來(lái)不必要的損失。 寫這篇文章時(shí),已經(jīng)進(jìn)入我的春節(jié)假期,而我也已經(jīng)踏上了 回家的火車,大家有疑問(wèn)可以在評(píng)論中回復(fù),如有錯(cuò)誤之處還望大家能指出,以免誤導(dǎo)他人 提前祝大家新年快樂(lè)!

如果您覺(jué)得本文讓您有所收獲,不妨點(diǎn)下贊,為我的付出,給一點(diǎn)點(diǎn)回報(bào)!

如果您覺(jué)得本人也有點(diǎn)意思,不妨點(diǎn)個(gè)觀注,大家一起談技術(shù),談人生!

?以下為參考資料

http://www.guokr.com/post/114121/? https原理 http://www.guokr.com/post/116169/?SSL證書(shū) http://www.cnblogs.com/svan/p/5090201.html?https工作原理 http://blog.csdn.net/clh604/article/details/22179907?Https 原理 https://www.zhihu.com/question/37370216/answer/71956414??瀏覽器如何驗(yàn)證HTTPS證書(shū)的合法性? http://blog.csdn.net/wkk2620632/article/details/39433673???公鑰證書(shū)cer,pfx http://www.07net01.com/zhishi/640504.html??數(shù)字證書(shū)資料cer和pfx的區(qū)別

總結(jié)

以上是生活随笔為你收集整理的HTTPS 原理解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。