什么是Https------------Http安全版(http下加入SSL層)就是HTTP的安全升級版
Http協(xié)議的客戶端和服務端通信采用的是明文(post請求也只是將數(shù)據(jù)放在header中,但依然是明文傳輸盏浙。而Hppts協(xié)議的客戶端和服務端間通信采用的秘文傳輸(對稱加密和非對稱加密相結(jié)合)
Https的作用:內(nèi)容加密建立一個信息安全通道雁仲,來保證數(shù)據(jù)傳輸?shù)陌踩?b>身份認證確認網(wǎng)站的真實性;數(shù)據(jù)完整性防止內(nèi)容被第三方冒充或者篡改
Https的劣勢:對數(shù)據(jù)進行加解密決定了它比http慢漫试;需要進行非對稱的加解密,且需要三次握手垛贤。首次連接比較慢點惦银,當然現(xiàn)在也有很多的優(yōu)化绒窑。出于安全考慮,瀏覽器不會在本地保存HTTPS緩存拷恨。實際上脖律,只要在HTTP頭中使用特定命令,HTTPS是可以緩存的挑随。
Firefox默認只在內(nèi)存中緩存HTTPS状您。
但是,只要頭命令中有Cache-Control: Public兜挨,緩存就會被寫到硬盤上膏孟。
IE只要http頭允許就可以緩存https內(nèi)容,緩存策略與是否使用HTTPS協(xié)議無關(guān)拌汇。
HTTPS和HTTP的區(qū)別(http是明文傳輸柒桑,端口:80,https是加密傳輸噪舀,端口:443)
https協(xié)議需要到CA申請證書魁淳。
http是超文本傳輸協(xié)議,信息是明文傳輸与倡;https 則是具有安全性的ssl加密傳輸協(xié)議界逛。
http和https使用的是完全不同的連接方式,用的端口也不一樣纺座,前者是80息拜,后者是443。
http的連接很簡單净响,是無狀態(tài)的少欺;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進行加密傳輸、身份認證的網(wǎng)絡協(xié)議馋贤,比http協(xié)議安全赞别。
http默認使用80端口,https默認使用443端口
網(wǎng)絡基礎的同學都知道配乓,HTTP是應用層協(xié)議仿滔,位于HTTP協(xié)議之下是傳輸協(xié)議TCP惠毁。TCP負責傳輸,HTTP則定義了數(shù)據(jù)如何進行包裝堤撵。
傳輸加密的流程:原先是應用層將數(shù)據(jù)直接給到TCP進行傳輸仁讨,現(xiàn)在改成應用層將數(shù)據(jù)給到TLS/SSL,將數(shù)據(jù)加密后实昨,再給到TCP進行傳輸洞豁。
HTTPS是如何加密數(shù)據(jù)的:
握手認證:客戶端一次請求-——-服務端返回數(shù)字證書—————客戶端生成對稱密匙
客戶端發(fā)起一次請求后,服務端返回數(shù)字證書,客戶端接受到后,生成一個對稱密鑰,再用服務器下發(fā)證書中的公鑰對其加密并發(fā)送,服務端接受到客戶端發(fā)送的加密后的對稱密鑰后用自己的私鑰解密,獲得對稱密鑰。到此服務端和客戶端都擁有了可以用來加密數(shù)據(jù)的對稱密鑰荒给,并且可以保證該密鑰沒有泄漏丈挟。
傳輸階段————客戶端和服務端用上面得到的對稱密鑰將數(shù)據(jù)加密后正常傳輸。
數(shù)字簽名與摘要
簡單的來說志电,“摘要”就是對傳輸?shù)膬?nèi)容曙咽,通過hash算法計算出一段固定長度的串(是不是聯(lián)想到了文章摘要)。然后挑辆,在通過CA的私鑰對這段摘要進行加密例朱,加密后得到的結(jié)果就是“數(shù)字簽名”。(這里提到CA的私鑰鱼蝉,后面再進行介紹)
明文 -->hash運算--> 摘要 --> 私鑰加密 --> 數(shù)字簽名
結(jié)合上面內(nèi)容洒嗤,我們知道,這段數(shù)字簽名只有CA的公鑰才能夠解密魁亦。
接下來渔隶,我們再來看看神秘的“證書”究竟包含了什么內(nèi)容,然后就大致猜到是如何對非法證書進行預防的了洁奈。
HTTPS其實是有兩部分組成:HTTP +SSL/ TLS间唉,也就是在HTTP上又加了一層處理加密信息的模塊。服務端和客戶端的信息傳輸都會通過TLS進行加密利术,所以傳輸?shù)臄?shù)據(jù)都是加密后的數(shù)據(jù)呈野。具體是如何進行加密,解密印叁,驗證的际跪,且看下圖。
1. 客戶端發(fā)起HTTPS請求—————瀏覽器里輸入一個https網(wǎng)址喉钢,然后連接到server的443端口
2. 服務端的配置
采用HTTPS協(xié)議的服務器必須要有一套數(shù)字證書,可以自己制作良姆,也可以向組織申請肠虽。區(qū)別就是自己頒發(fā)的證書需要客戶端驗證通過,才可以繼續(xù)訪問玛追,而使用受信任的公司申請的證書則不會彈出提示頁面(startssl就是個不錯的選擇税课,有1年的免費服務)闲延。這套證書其實就是一對公鑰和私鑰。如果對公鑰和私鑰不太理解韩玩,可以想象成一把鑰匙和一個鎖頭垒玲,只是全世界只有你一個人有這把鑰匙,你可以把鎖頭給別人找颓,別人可以用這個鎖把重要的東西鎖起來合愈,然后發(fā)給你,因為只有你一個人有這把鑰匙击狮,所以只有你才能看到被這把鎖鎖起來的東西佛析。
3. 傳送證書
這個證書其實就是公鑰,只是包含了很多信息彪蓬,如證書的頒發(fā)機構(gòu)寸莫,過期時間等等。
4. 客戶端解析證書————————先驗證證書档冬,沒問題的話生成隨機值膘茎,用證書加密
這部分工作是有客戶端的TLS來完成的,首先會驗證公鑰是否有效酷誓,比如頒發(fā)機構(gòu)披坏,過期時間等等,如果發(fā)現(xiàn)異常呛牲,則會彈出一個警告框刮萌,提示證書存在問題。如果證書沒有問題娘扩,那么就生成一個隨即值着茸。然后用證書對該隨機值進行加密。就好像上面說的琐旁,把隨機值用鎖頭鎖起來涮阔,這樣除非有鑰匙,不然看不到被鎖住的內(nèi)容灰殴。
5. 傳送加密信息——————其實是證書加密后的隨機值
這部分傳送的是用證書加密后的隨機值敬特,目的就是讓服務端得到這個隨機值,以后客戶端和服務端的通信就可以通過這個隨機值來進行加密解密了牺陶。
6. 服務端解密信息
服務端用私鑰解密后伟阔,得到了客戶端傳過來的隨機值(私鑰),然后把內(nèi)容通過該值進行對稱加密掰伸。所謂對稱加密就是皱炉,將信息和私鑰通過某種算法混合在一起,這樣除非知道私鑰狮鸭,不然無法獲取內(nèi)容合搅,而正好客戶端和服務端都知道這個私鑰多搀,所以只要加密算法夠彪悍,私鑰夠復雜灾部,數(shù)據(jù)就夠安全康铭。
7. 傳輸加密后的信息————————私鑰加密
這部分信息是服務段用私鑰加密后的信息,可以在客戶端被還原
8. 客戶端解密信息-——————私鑰解密得到內(nèi)容
客戶端用之前生成的私鑰解密服務段傳過來的信息赌髓,于是獲取了解密后的內(nèi)容从藤。整個過程第三方即使監(jiān)聽到了數(shù)據(jù),也束手無策春弥。