HTTPS介紹
超文本傳輸安全協(xié)議(Hypertext Transfer Protocol Secure诱建,縮寫(xiě):HTTPS蝴蜓,常稱為HTTP over TLS,HTTP over SSL或HTTP Secure)是一種網(wǎng)絡(luò)安全傳輸協(xié)議俺猿。在計(jì)算機(jī)網(wǎng)絡(luò)上茎匠,HTTPS經(jīng)由超文本傳輸協(xié)議進(jìn)行通信,但利用SSL/TLS來(lái)加密數(shù)據(jù)包押袍。HTTPS開(kāi)發(fā)的主要目的诵冒,是提供對(duì)網(wǎng)絡(luò)服務(wù)器的身份認(rèn)證,保護(hù)交換數(shù)據(jù)的隱私與完整性伯病。這個(gè)協(xié)議由網(wǎng)景公司(Netscape)在1994年首次提出造烁,隨后擴(kuò)展到互聯(lián)網(wǎng)上。
HTTPS連接經(jīng)常用于萬(wàn)維網(wǎng)上的交易支付和企業(yè)信息系統(tǒng)中敏感信息的傳輸午笛。
http協(xié)議直接放置在TCP協(xié)議之上惭蟋,而HTTPS提出在http和TCP中間加上一層加密層。從發(fā)送端看药磺,這一層負(fù)責(zé)把http的內(nèi)容加密后送到下層的TCP告组,從接收方看,這一層負(fù)責(zé)將TCP送來(lái)的數(shù)據(jù)解密還原成http的內(nèi)容癌佩。所以嚴(yán)格地講木缝,HTTPS并不是一個(gè)單獨(dú)的協(xié)議便锨,而是對(duì)工作在一加密連接(TLS或SSL)上的常規(guī)HTTP協(xié)議的稱呼。
下面是一個(gè)簡(jiǎn)單的HTTPS協(xié)議棧的圖:
HTTPS解決的問(wèn)題
HTTP協(xié)議由于是明文傳送我碟,所以存在三大風(fēng)險(xiǎn):
1放案、被竊聽(tīng)的風(fēng)險(xiǎn):第三方可以截獲并查看你的內(nèi)容
2、被篡改的危險(xiǎn):第三方可以截獲并修改你的內(nèi)容
3矫俺、被冒充的風(fēng)險(xiǎn):第三方可以偽裝成通信方與你通信
HTTP因?yàn)榇嬖谝陨先蟀踩L(fēng)險(xiǎn)吱殉,所以才有了HTTPS的出現(xiàn)。
相關(guān)術(shù)語(yǔ)
對(duì)稱密碼算法
是指加密和解密使用相同的密鑰厘托,典型的有DES友雳、RC5、IDEA(分組加密)铅匹,RC4(序列加密)押赊;
非對(duì)稱密碼算法
又稱為公鑰加密算法,是指加密和解密使用不同的密鑰(公鑰用于加密包斑,私鑰用于解密)流礁。比如A發(fā)送,B接收罗丰,A想確保消息只有B看到崇棠,需要B生成一對(duì)公私鑰,并拿到B的公鑰丸卷。于是A用這個(gè)公鑰加密消息,B收到密文后用自己的與之匹配的私鑰解密即可询刹。反過(guò)來(lái)也可以用私鑰加簽公鑰驗(yàn)簽谜嫉。也就是說(shuō)對(duì)于給定的公鑰有且只有與之匹配的私鑰可以解密,對(duì)于給定的私鑰凹联,有且只有與之匹配的公鑰可以解密沐兰。典型的算法有RSA,DSA蔽挠,DH住闯;
散列算法
散列變換是指把文件內(nèi)容通過(guò)某種公開(kāi)的算法,變成固定長(zhǎng)度的值(散列值)澳淑,這個(gè)過(guò)程可以使用密鑰也可以不使用比原。這種散列變換是不可逆的,也就是說(shuō)不能從散列值變成原文杠巡。因此量窘,散列變換通常用于驗(yàn)證原文是否被篡改。典型的算法有:MD5氢拥,SHA蚌铜,CRC等锨侯。
關(guān)于CA及數(shù)字證書(shū)
什么是CA
CA(Certificate Authority)是數(shù)字證書(shū)認(rèn)證中心的簡(jiǎn)稱,是指發(fā)放冬殃、管理囚痴、廢除數(shù)字證書(shū)的機(jī)構(gòu)。
CA的作用是檢查證書(shū)持有者身份的合法性审葬,并簽發(fā)證書(shū)(在證書(shū)上簽字)深滚,以防證書(shū)被偽造或篡改,以及對(duì)證書(shū)和密鑰進(jìn)行管理耳璧。
CA 也擁有一個(gè)證書(shū)(內(nèi)含公鑰)和私鑰成箫。網(wǎng)上的公眾用戶通過(guò)驗(yàn)證 CA 的簽字從而信任 CA ,任何人都可以得到 CA 的證書(shū)(含公鑰)旨枯,用以驗(yàn)證它所簽發(fā)的證書(shū)蹬昌。
如果用戶想得到一份屬于自己的證書(shū),他應(yīng)先向 CA 提出申請(qǐng)攀隔。在 CA 判明申請(qǐng)者的身份后皂贩,便為他分配一個(gè)公鑰,并且 CA 將該公鑰與申請(qǐng)者的身份信息綁在一起昆汹,并為之簽字后明刷,便形成證書(shū)發(fā)給申請(qǐng)者。
如果一個(gè)用戶想鑒別另一個(gè)證書(shū)的真?zhèn)温郑陀?CA 的公鑰對(duì)那個(gè)證書(shū)上的簽字進(jìn)行驗(yàn)證辈末,一旦驗(yàn)證通過(guò),該證書(shū)就被認(rèn)為是有效的映皆。
證書(shū)的內(nèi)容
數(shù)字證書(shū)的格式遵循X.509標(biāo)準(zhǔn)挤聘,X.509是由國(guó)際電信聯(lián)盟(ITU-T)制定的數(shù)字證書(shū)標(biāo)準(zhǔn),規(guī)范了公開(kāi)密鑰認(rèn)證捅彻、證書(shū)吊銷(xiāo)列表组去、授權(quán)證書(shū)、證書(shū)路徑驗(yàn)證算法等步淹。
證書(shū)的內(nèi)容包括:電子簽證機(jī)關(guān)的信息从隆、公鑰用戶信息、公鑰缭裆、權(quán)威機(jī)構(gòu)的簽字和有效期等等键闺。
下圖就表示一個(gè)數(shù)字證書(shū)包含的內(nèi)容:
我們這里能看到頒發(fā)機(jī)構(gòu)簽名是由申請(qǐng)者信息經(jīng)過(guò)哈希算法得到hash值,然后再用機(jī)構(gòu)的私鑰進(jìn)行加密幼驶。所以這個(gè)簽名只有辦法機(jī)構(gòu)的公鑰才能解密艾杏,而一般權(quán)威CA機(jī)構(gòu)的根證書(shū)(含公鑰)都內(nèi)置在瀏覽器中,所以客戶端接收到這個(gè)數(shù)字證書(shū)后,先把申請(qǐng)者信息用同樣的哈希算法得到hash值h1购桑,然后用公鑰進(jìn)行辦法機(jī)構(gòu)簽名解密得到hash值h2畅铭,如果h1==h2,則表示證書(shū)是有效的勃蜘。
SSL/TLS概念
SSL/TLS是加密通信協(xié)議硕噩,SSL由NetScape在1994年設(shè)計(jì),1999年互聯(lián)網(wǎng)標(biāo)準(zhǔn)化組織ISOC接替NetScape公司缭贡,發(fā)布了SSL的升級(jí)版TLS 1.0版÷茫現(xiàn)在主流的瀏覽器等都支持TLS1.2版本,如iOS9中新增App Transport Security(簡(jiǎn)稱ATS)特性阳惹,強(qiáng)制http轉(zhuǎn)向https谍失,其中加密通信協(xié)議就需要TLS1.2及以上版本。
SSL/TLS協(xié)議的基本思路是采用公鑰加密法莹汤,也就是說(shuō)快鱼,客戶端先向服務(wù)器端索要公鑰,然后用公鑰加密信息纲岭,服務(wù)器收到密文后抹竹,用自己的私鑰解密。
SSL/TLS協(xié)議的基本過(guò)程是這樣的:
(1) 客戶端向服務(wù)器端索要并驗(yàn)證公鑰止潮。
(2) 雙方協(xié)商生成"對(duì)話密鑰"窃判。
(3) 雙方采用"對(duì)話密鑰"進(jìn)行加密通信。
所以說(shuō)SSL/TLS協(xié)議主要是包含非對(duì)稱加密(公鑰加密)和對(duì)稱加密喇闸,用非對(duì)稱加密來(lái)得到對(duì)稱加密的"對(duì)話秘鑰"袄琳,然后用對(duì)稱加密來(lái)進(jìn)行加密通信。
HTTPS流程步驟
首先看看組成HTTPS的協(xié)議:HTTP協(xié)議和SSL/TLS協(xié)議燃乍。HTTP協(xié)議就不用講了跨蟹,而SSL/TLS就是負(fù)責(zé)加密解密等安全處理的模塊,所以HTTPS的核心在SSL/TLS上面橘沥。整個(gè)通信如下:
1、瀏覽器發(fā)起往服務(wù)器的443端口發(fā)起請(qǐng)求夯秃,請(qǐng)求攜帶了瀏覽器支持的加密算法和哈希算法座咆。
2、服務(wù)器收到請(qǐng)求仓洼,選擇瀏覽器支持的加密算法和哈希算法介陶。
3、服務(wù)器下將數(shù)字證書(shū)返回給瀏覽器色建,這里的數(shù)字證書(shū)可以是向某個(gè)可靠機(jī)構(gòu)申請(qǐng)的哺呜,也可以是自制的。
4箕戳、瀏覽器進(jìn)入數(shù)字證書(shū)認(rèn)證環(huán)節(jié)某残,這一部分是瀏覽器內(nèi)置的TLS完成的:
4.1 首先瀏覽器會(huì)從內(nèi)置的證書(shū)列表中索引国撵,找到服務(wù)器下發(fā)證書(shū)對(duì)應(yīng)的機(jī)構(gòu),如果沒(méi)有找到玻墅,此時(shí)就會(huì)提示用戶該證書(shū)是不是由權(quán)威機(jī)構(gòu)頒發(fā)介牙,是不可信任的。如果查到了對(duì)應(yīng)的機(jī)構(gòu)澳厢,則取出該機(jī)構(gòu)頒發(fā)的公鑰环础。
4.2 用機(jī)構(gòu)的證書(shū)公鑰解密得到證書(shū)的內(nèi)容和證書(shū)簽名,內(nèi)容包括網(wǎng)站的網(wǎng)址剩拢、網(wǎng)站的公鑰线得、證書(shū)的有效期等。瀏覽器會(huì)先驗(yàn)證證書(shū)簽名的合法性(驗(yàn)證過(guò)程類(lèi)似上面Bob和Susan的通信)徐伐。簽名通過(guò)后贯钩,瀏覽器驗(yàn)證證書(shū)記錄的網(wǎng)址是否和當(dāng)前網(wǎng)址是一致的,不一致會(huì)提示用戶呵晨。如果網(wǎng)址一致會(huì)檢查證書(shū)有效期魏保,證書(shū)過(guò)期了也會(huì)提示用戶。這些都通過(guò)認(rèn)證時(shí)摸屠,瀏覽器就可以安全使用證書(shū)中的網(wǎng)站公鑰了谓罗。
4.3 瀏覽器生成一個(gè)隨機(jī)數(shù)R,并使用網(wǎng)站公鑰對(duì)R進(jìn)行加密季二。
5檩咱、瀏覽器將加密的R傳送給服務(wù)器。
6胯舷、服務(wù)器用自己的私鑰解密得到R刻蚯。
7、服務(wù)器以R為密鑰使用了對(duì)稱加密算法加密網(wǎng)頁(yè)內(nèi)容并傳輸給瀏覽器桑嘶。
8炊汹、瀏覽器以R為密鑰使用之前約定好的解密算法獲取網(wǎng)頁(yè)內(nèi)容。
身份驗(yàn)證技術(shù)
所謂身份驗(yàn)證就是用公鑰生成可信賴的證書(shū)逃顶。因?yàn)榉菍?duì)稱加密存在一個(gè)問(wèn)題就是沒(méi)法驗(yàn)證拿到的公鑰就是服務(wù)端公開(kāi)的公鑰讨便。
為了解決以上問(wèn)題,CA應(yīng)用而生(Certifity Authority)以政,數(shù)字證書(shū)認(rèn)證機(jī)構(gòu)霸褒。在網(wǎng)上找到一張圖,一看就明白了
兩個(gè)問(wèn)題
如何保證公鑰不被篡改盈蛮?
解決方法:將公鑰放在數(shù)字證書(shū)中废菱。只要證書(shū)是可信的,公鑰就是可信的。那如何保證證書(shū)是可信的呢殊轴?證書(shū)由CA機(jī)構(gòu)進(jìn)行頒發(fā)衰倦,而游覽器內(nèi)置了這些CA機(jī)構(gòu)的根證書(shū),只要由這些CA機(jī)構(gòu)辦法的數(shù)字證書(shū)即是可信的梳凛。
為什么不直接使用公鑰加密耿币,還要加上個(gè)對(duì)稱加密?
公鑰加密是非對(duì)稱加密韧拒,加密計(jì)算量大淹接,而對(duì)稱加密運(yùn)算速度非常快叛溢。所以這里只有第一次握手時(shí)進(jìn)行公鑰加密來(lái)得到對(duì)稱加密的"對(duì)話密鑰"塑悼,之后的通信就使用對(duì)稱加密來(lái)進(jìn)行通信了。
加密算法
HTTPS和HTTP的區(qū)別主要為以下四點(diǎn):
一楷掉、https協(xié)議需要到ca申請(qǐng)證書(shū)厢蒜,一般免費(fèi)證書(shū)很少,需要交費(fèi)烹植。
二斑鸦、http是超文本傳輸協(xié)議,信息是明文傳輸草雕,https 則是具有安全性加密傳輸協(xié)議巷屿。
三、http和https使用的是完全不同的連接方式墩虹,用的端口也不一樣嘱巾,前者是80,后者是443诫钓。
四旬昭、http的連接很簡(jiǎn)單,是無(wú)狀態(tài)的菌湃;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸问拘、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議比http協(xié)議安全。
HTTPS 的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
使用HTTPS 協(xié)議可認(rèn)證用戶和服務(wù)器惧所,確保數(shù)據(jù)發(fā)送到正確的客戶機(jī)和服務(wù)器场梆;
HTTPS 協(xié)議是由 SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議纯路,要比 http 協(xié)議安全,可防止數(shù)據(jù)在傳輸過(guò)程中不被竊取寞忿、改變驰唬,確保數(shù)據(jù)的完整性。
HTTPS 是現(xiàn)行架構(gòu)下最安全的解決方案,雖然不是絕對(duì)安全叫编,但它大幅增加了中間人攻擊的成本辖佣。
缺點(diǎn)
HTTPS 比HTTP耗費(fèi)更多服務(wù)器資源(https其實(shí)就是建構(gòu)在SSL/TLS之上的 http協(xié)議,所以要比較https比http多用多少服務(wù)器資源搓逾,主要看SSL/TLS本身消耗多少服務(wù)器資源卷谈。)
耗費(fèi)的資源多,過(guò)程也復(fù)雜霞篡,想當(dāng)然訪問(wèn)不如HTTP高效世蔗。大流量網(wǎng)站非必要也不會(huì)采用呼胚,流量成本太高喊熟。
HTTPS 并不能防止站點(diǎn)被網(wǎng)絡(luò)蜘蛛抓取叶洞。在某些情形中余掖,被加密資源的URL可僅通過(guò)截獲請(qǐng)求和響應(yīng)的大小推得寸爆,這就可使攻擊者同時(shí)知道明文(公開(kāi)的靜態(tài)內(nèi)容)和密文(被加密過(guò)的明文),從而使選擇密文攻擊成為可能盐欺×薅梗
SSL 證書(shū)需要錢(qián),功能越強(qiáng)大的證書(shū)費(fèi)用越高冗美,個(gè)人網(wǎng)站魔种、小網(wǎng)站沒(méi)有必要一般不會(huì)用《昭茫
SSL 證書(shū)通常需要綁定IP务嫡,不能在同一IP上綁定多個(gè)域名,IPv4資源不可能支撐這個(gè)消耗漆改。