首先聲明此文轉(zhuǎn)載【http://www.open-open.com/lib/view/open1478228259347.html】
安全越來(lái)越被重視
2014年8月份Google在官博上發(fā)表《HTTPS as a ranking signal》
表示調(diào)整其搜索引擎算法毅往,采用HTTPS加密的網(wǎng)站在搜索結(jié)果中的排名將會(huì)更高,鼓勵(lì)全球網(wǎng)站采用安全度更高的HTTPS以保證訪(fǎng)客安全派近。
同一年(2014年)攀唯,百度開(kāi)始對(duì)外開(kāi)放了HTTPS的訪(fǎng)問(wèn),并于3月初正式對(duì)全網(wǎng)用戶(hù)進(jìn)行了HTTPS跳轉(zhuǎn)渴丸。對(duì)百度自身來(lái)說(shuō)侯嘀,HTTPS能夠保護(hù)用戶(hù)體驗(yàn),降低劫持/隱私泄露對(duì)用戶(hù)的傷害谱轨。
而2015年戒幔,百度開(kāi)放收錄HTTPS站點(diǎn)公告。全面支持HTTPS頁(yè)面直接收錄土童;百度搜索引擎認(rèn)為在權(quán)值相同的站點(diǎn)中诗茎,采用HTTPS協(xié)議的頁(yè)面更加安全,排名上會(huì)優(yōu)先對(duì)待献汗。
“HTTP = 不安全”敢订,為什么說(shuō)HTTP不安全王污?
HTTP報(bào)文是由一行行簡(jiǎn)單字符串組成的,是純文本楚午,可以很方便地對(duì)其進(jìn)行讀寫(xiě)昭齐。一個(gè)簡(jiǎn)單事務(wù)所使用的報(bào)文:
HTTP傳輸?shù)膬?nèi)容是明文的,你上網(wǎng)瀏覽過(guò)醒叁、提交過(guò)的內(nèi)容司浪,所有在后臺(tái)工作的實(shí)體,比如路由器的所有者把沼、網(wǎng)線(xiàn)途徑路線(xiàn)的不明意圖者啊易、省市運(yùn)營(yíng)商、運(yùn)營(yíng)商骨干網(wǎng)饮睬、跨運(yùn)營(yíng)商網(wǎng)關(guān)等都能夠查看租谈。舉個(gè)不安全的例子:
一個(gè)簡(jiǎn)單非HTTPS的登錄采用POST方法提交包含用戶(hù)名和密碼的表單,會(huì)發(fā)生什么捆愁?
POST表單發(fā)出去的信息割去,沒(méi)有做任何的安全性信息置亂(加密編碼),直接編碼為下一層協(xié)議(TCP層)需要的內(nèi)容昼丑,所有用戶(hù)名和密碼信息一覽無(wú)余呻逆,任何攔截到報(bào)文信息的人都可以獲取到你的用戶(hù)名和密碼,是不是想想都覺(jué)得恐怖菩帝?
那么問(wèn)題來(lái)了咖城,怎么樣才是安全的呢?
對(duì)于包含用戶(hù)敏感信息的網(wǎng)站需要進(jìn)行怎樣的安全防護(hù)呼奢?
對(duì)于一個(gè)包含用戶(hù)敏感信息的網(wǎng)站(從實(shí)際角度出發(fā))宜雀,我們期望實(shí)現(xiàn)HTTP安全技術(shù)能夠滿(mǎn)足至少以下需求:
服務(wù)器認(rèn)證(客戶(hù)端知道它們是在與真正的而不是偽造的服務(wù)器通話(huà))
客戶(hù)端認(rèn)證(服務(wù)器知道它們是在與真正的而不是偽造的客戶(hù)端通話(huà))
完整性(客戶(hù)端和服務(wù)器的數(shù)據(jù)不會(huì)被修改)
加密(客戶(hù)端和服務(wù)器的對(duì)話(huà)是私密的,無(wú)需擔(dān)心被竊聽(tīng))
效率(一個(gè)運(yùn)行的足夠快的算法握础,以便低端的客戶(hù)端和服務(wù)器使用)
普適性(基本上所有的客戶(hù)端和服務(wù)器都支持這個(gè)協(xié)議)
管理的可擴(kuò)展性(在任何地方的任何人都可以立即進(jìn)行安全通信)
適應(yīng)性(能夠支持當(dāng)前最知名的安全方法)
在社會(huì)上的可行性(滿(mǎn)足社會(huì)的政治文化需要)
HTTPS協(xié)議來(lái)解決安全性的問(wèn)題:HTTPS和HTTP的不同 – TLS安全層(會(huì)話(huà)層)
超文本傳輸安全協(xié)議(HTTPS辐董,也被稱(chēng)為HTTP over TLS,HTTP over SSL或HTTP Secure)是一種網(wǎng)絡(luò)安全傳輸協(xié)議禀综。
HTTPS開(kāi)發(fā)的主要目的简烘,是提供對(duì)網(wǎng)絡(luò)服務(wù)器的認(rèn)證,保證交換信息的機(jī)密性和完整性定枷。
它和HTTP的差別在于孤澎,HTTPS經(jīng)由超文本傳輸協(xié)議進(jìn)行通信,但利用SSL/TLS來(lái)對(duì)包進(jìn)行加密依鸥,即所有的HTTP請(qǐng)求和響應(yīng)數(shù)據(jù)在發(fā)送到網(wǎng)絡(luò)上之前亥至,都要進(jìn)行加密悼沈。如下圖:
安全操作贱迟,即數(shù)據(jù)編碼(加密)和解碼(解密)的工作是由SSL一層來(lái)完成姐扮,而其他的部分和HTTP協(xié)議沒(méi)有太多的不同。更詳細(xì)的TLS層協(xié)議圖:
SSL層是實(shí)現(xiàn)HTTPS的安全性的基石衣吠,它是如何做到的呢茶敏?我們需要了解SSL層背后基本原理和概念,由于涉及到信息安全和密碼學(xué)的概念缚俏,我盡量用簡(jiǎn)單的語(yǔ)言和示意圖來(lái)描述惊搏。
SSL層背后基本原理和概念
介紹HTTPS背后的基本原理和概念,涉及到的概念:加密算法忧换,數(shù)字證書(shū)恬惯,CA中心等。
加密算法
加密算法嚴(yán)格來(lái)說(shuō)屬于編碼學(xué)(密碼編碼學(xué))亚茬,編碼是信息從一種形式或格式轉(zhuǎn)換為另一種形式的過(guò)程酪耳。解碼,是編碼的逆過(guò)程(對(duì)應(yīng)密碼學(xué)中的解密)刹缝。
對(duì)稱(chēng)加密算法
加密算法主要分兩類(lèi):對(duì)稱(chēng)和非對(duì)稱(chēng)加密算法碗暗。在對(duì)稱(chēng)加密算法中,使用的密鑰只有一個(gè)梢夯,發(fā)收信雙方都使用這個(gè)密鑰對(duì)數(shù)據(jù)進(jìn)行加密和解密言疗,這就要求解密方事先必須知道加密密鑰。
但是對(duì)稱(chēng)加密算法有一個(gè)問(wèn)題:一旦通信的實(shí)體多了颂砸,那么管理秘鑰就會(huì)成為問(wèn)題噪奄。
非對(duì)稱(chēng)加密算法(加密和簽名)
非對(duì)稱(chēng)加密算法需要兩個(gè)密鑰:公開(kāi)密鑰(public key)和私有密鑰(private key)。公開(kāi)密鑰與私有密鑰是一對(duì)沾凄,如果用公開(kāi)密鑰對(duì)數(shù)據(jù)進(jìn)行加密梗醇,只有用對(duì)應(yīng)的私有密鑰才能解密;如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密撒蟀,那么只有用對(duì)應(yīng)的公開(kāi)密鑰才能解密叙谨,這個(gè)反過(guò)來(lái)的過(guò)程叫作數(shù)字簽名(因?yàn)樗借€是非公開(kāi)的,所以可以驗(yàn)證該實(shí)體的身份)保屯。
他們就像是鎖和鑰匙的關(guān)系手负。Alice把打開(kāi)的鎖(公鑰)發(fā)送給不同的實(shí)體(Bob,Tom)姑尺,然后他們用這把鎖把信息加密竟终,Alice只需要一把鑰匙(私鑰)就能解開(kāi)內(nèi)容。
那么切蟋,有一個(gè)很重要的問(wèn)題:加密算法是如何保證數(shù)據(jù)傳輸?shù)陌踩炒罚床槐黄平猓坑袃牲c(diǎn):
1.利用數(shù)學(xué)計(jì)算的困難性(比如:離散對(duì)數(shù)問(wèn)題)
2.加密算法是公開(kāi)的,關(guān)鍵在于秘鑰喘鸟,密碼學(xué)中有柯克霍夫斯基原則匆绣,即加密算法的安全性依賴(lài)的是密鑰的保密而不是算法的保密,因此什黑,保證秘鑰的定期更換是非常重要的崎淳。
數(shù)字證書(shū),用來(lái)實(shí)現(xiàn)身份認(rèn)證和秘鑰交換
數(shù)字證書(shū)是一個(gè)經(jīng)證書(shū)授權(quán)中心數(shù)字簽名的包含公開(kāi)密鑰擁有者信息愕把,使用的加密算法以及公開(kāi)密鑰的文件拣凹。
以數(shù)字證書(shū)為核心的加密技術(shù)可以對(duì)網(wǎng)絡(luò)上傳輸?shù)男畔⑦M(jìn)行加密和解密、數(shù)字簽名和簽名驗(yàn)證恨豁,確保網(wǎng)上傳遞信息的機(jī)密性嚣镜、完整性及交易的不可抵賴(lài)性。使用了數(shù)字證書(shū)橘蜜,即使您發(fā)送的信息在網(wǎng)上被他人截獲祈惶,甚至您丟失了個(gè)人的賬戶(hù)、密碼等信息扮匠,仍可以保證您的賬戶(hù)捧请、資金安全。 (比如棒搜,支付寶的一種安全手段就是在指定電腦上安裝數(shù)字證書(shū))
身份認(rèn)證(我憑什么信任你)
身份認(rèn)證是建立每一個(gè)TLS連接不可或缺的部分疹蛉。比如,你有可能和任何一方建立一個(gè)加密的通道力麸,包括攻擊者可款,除非我們可以確定通信的服務(wù)端是我們可以信任的,否則克蚂,所有的加密(保密)工作都沒(méi)有任何作用闺鲸。
而身份認(rèn)證的方式就是通過(guò)證書(shū)以數(shù)字方式簽名的聲明,它將公鑰與持有相應(yīng)私鑰的主體(個(gè)人埃叭、設(shè)備和服務(wù))身份綁定在一起摸恍。通過(guò)在證書(shū)上簽名,CA可以核實(shí)與證書(shū)上公鑰相應(yīng)的私鑰為證書(shū)所指定的主體所擁有赤屋。
了解TLS協(xié)議
HTTPS的安全主要靠的是TLS協(xié)議層的操作立镶。那么它到底做了什么,來(lái)建立一條安全的數(shù)據(jù)傳輸通道呢类早?
TLS握手:安全通道是如何建立的
0 ms
TLS運(yùn)行在一個(gè)可靠的TCP協(xié)議上媚媒,意味著我們必須首先完成TCP協(xié)議的三次握手。
56 ms
在TCP連接建立完成之后涩僻,客戶(hù)端會(huì)以明文的方式發(fā)送一系列說(shuō)明缭召,比如使用的TLS協(xié)議版本栈顷,客戶(hù)端所支持的加密算法等鸠信。
84 ms
服務(wù)器端拿到TLS協(xié)議版本烁焙,根據(jù)客戶(hù)端提供的加密算法列表選擇一個(gè)合適的加密算法,然后將選擇的算法連同服務(wù)器的證書(shū)一起發(fā)送到客戶(hù)端脂男。
112 ms
假設(shè)服務(wù)器和客戶(hù)端協(xié)商后晴竞,得到一個(gè)共同的TLS版本和加密算法,客戶(hù)端檢測(cè)服務(wù)端的證書(shū)狠半,非常滿(mǎn)意噩死,客戶(hù)端就會(huì)要么使用RSA加密算法(公鑰加密)或者DH秘鑰交換協(xié)議,得到一個(gè)服務(wù)器和客戶(hù)端公用的對(duì)稱(chēng)秘鑰神年。
由于歷史和商業(yè)原因已维,基于RSA的秘鑰交換占據(jù)了TLS協(xié)議的大片江山:客戶(hù)端生成一個(gè)對(duì)稱(chēng)秘鑰,使用服務(wù)器端證書(shū)的公鑰加密已日,然后發(fā)送給服務(wù)器端垛耳,服務(wù)器端利用私鑰解密得到對(duì)稱(chēng)秘鑰。
140 ms
服務(wù)器處理由客戶(hù)端發(fā)送的秘鑰交換參數(shù)飘千,通過(guò)驗(yàn)證MAC(Message Authentication Code堂鲜,消息認(rèn)證碼)來(lái)驗(yàn)證消息的完整性,返回一個(gè)加密過(guò)的“Finished”消息給客戶(hù)端护奈。
在密碼學(xué)中缔莲,消息認(rèn)證碼(英語(yǔ):Message Authentication Code,縮寫(xiě)為MAC)霉旗,又譯為消息鑒別碼痴奏、文件消息認(rèn)證碼、訊息鑒別碼厌秒、信息認(rèn)證碼读拆,是經(jīng)過(guò)特定算法后產(chǎn)生的一小段信息,檢查某段消息的完整性鸵闪,以及作身份驗(yàn)證檐晕。它可以用來(lái)檢查在消息傳遞過(guò)程中,其內(nèi)容是否被更改過(guò)蚌讼,不管更改的原因是來(lái)自意外或是蓄意攻擊棉姐。同時(shí)可以作為消息來(lái)源的身份驗(yàn)證,確認(rèn)消息的來(lái)源啦逆。
168 ms
客戶(hù)端用協(xié)商得到的堆成秘鑰解密“Finished”消息伞矩,驗(yàn)證MAC(消息完整性驗(yàn)證),如果一切ok夏志,那么這個(gè)加密的通道就建立完成乃坤,可以開(kāi)始數(shù)據(jù)傳輸了苛让。
在這之后的通信,采用對(duì)稱(chēng)秘鑰對(duì)數(shù)據(jù)加密傳輸湿诊,從而保證數(shù)據(jù)的機(jī)密性狱杰。
到此為止,我是想要介紹的基本原理的全部?jī)?nèi)容厅须,但HTTPS得知識(shí)點(diǎn)不止如此仿畸,還有更多說(shuō),現(xiàn)在來(lái)點(diǎn)干貨(實(shí)戰(zhàn))@屎汀错沽!
那么,教練眶拉,我想用HTTPS
選擇合適的證書(shū)千埃, Let’s Encrypt(It’s free, automated, and open.)是一種不錯(cuò)的選擇 – https://letsencrypt.org/
ThoughtWorks在2016年4月份發(fā)布的技術(shù)雷達(dá)中對(duì)Let’s Encrypt項(xiàng)目進(jìn)行了介紹:
從2015年12月開(kāi)始,Let’s Encrypt項(xiàng)目從封閉測(cè)試階段轉(zhuǎn)向公開(kāi)測(cè)試階段忆植,也就是說(shuō)用戶(hù)不再需要收到邀請(qǐng)才能使用它了放可。Let’s Encrypt為那些尋求網(wǎng)站安全的用戶(hù)提供了一種簡(jiǎn)單的方式獲取和管理證書(shū)。Let’s Encrypt也使得“安全和隱私”獲得了更好的保障朝刊,而這一趨勢(shì)已經(jīng)隨著ThoughtWorks和我們?cè)S多使用其進(jìn)行證書(shū)認(rèn)證的項(xiàng)目開(kāi)始了耀里。
據(jù)Let’s Encrypt發(fā)布的數(shù)據(jù)來(lái)看,至今該項(xiàng)目已經(jīng)頒發(fā)了超過(guò)300萬(wàn)份證書(shū)——300萬(wàn)這個(gè)數(shù)字是在5月8日-9日之間達(dá)成的拾氓。Let’s Encrypt是為了讓HTTP連接做得更加安全的一個(gè)項(xiàng)目备韧,所以越多的網(wǎng)站加入,互聯(lián)網(wǎng)就回變得越安全痪枫。
來(lái)自:http://insights.thoughtworkers.org/talk-about-https/