HTTPS介紹
超文本傳輸安全協(xié)議(Hypertext Transfer Protocol Secure,縮寫:HTTPS,常稱為HTTP over TLS,HTTP over SSL或HTTP Secure)是一種網(wǎng)絡(luò)安全傳輸協(xié)議。在計算機網(wǎng)絡(luò)上,HTTPS經(jīng)由超文本傳輸協(xié)議進(jìn)行通信,但利用SSL/TLS來加密數(shù)據(jù)包。HTTPS開發(fā)的主要目的,是提供對網(wǎng)絡(luò)服務(wù)器的身份認(rèn)證,保護(hù)交換數(shù)據(jù)的隱私與完整性。這個協(xié)議由網(wǎng)景公司(Netscape)在1994年首次提出,隨后擴展到互聯(lián)網(wǎng)上。
HTTPS連接經(jīng)常用于萬維網(wǎng)上的交易支付和企業(yè)信息系統(tǒng)中敏感信息的傳輸。
http協(xié)議直接放置在TCP協(xié)議之上,而HTTPS提出在http和TCP中間加上一層加密層。從發(fā)送端看,這一層負(fù)責(zé)把http的內(nèi)容加密后送到下層的TCP,從接收方看,這一層負(fù)責(zé)將TCP送來的數(shù)據(jù)解密還原成http的內(nèi)容。所以嚴(yán)格地講,HTTPS并不是一個單獨的協(xié)議,而是對工作在一加密連接(TLS或SSL)上的常規(guī)HTTP協(xié)議的稱呼。
下面是一個簡單的HTTPS協(xié)議棧的圖:

HTTPS解決的問題
HTTP協(xié)議由于是明文傳送,所以存在三大風(fēng)險:
1、被竊聽的風(fēng)險:第三方可以截獲并查看你的內(nèi)容
2、被篡改的危險:第三方可以截獲并修改你的內(nèi)容
3、被冒充的風(fēng)險:第三方可以偽裝成通信方與你通信
HTTP因為存在以上三大安全風(fēng)險,所以才有了HTTPS的出現(xiàn)。
相關(guān)術(shù)語
對稱密碼算法
是指加密和解密使用相同的密鑰,典型的有DES、RC5、IDEA(分組加密),RC4(序列加密);
非對稱密碼算法
又稱為公鑰加密算法,是指加密和解密使用不同的密鑰(公鑰用于加密,私鑰用于解密)。比如A發(fā)送,B接收,A想確保消息只有B看到,需要B生成一對公私鑰,并拿到B的公鑰。于是A用這個公鑰加密消息,B收到密文后用自己的與之匹配的私鑰解密即可。反過來也可以用私鑰加簽公鑰驗簽。也就是說對于給定的公鑰有且只有與之匹配的私鑰可以解密,對于給定的私鑰,有且只有與之匹配的公鑰可以解密。典型的算法有RSA,DSA,DH;
散列算法
散列變換是指把文件內(nèi)容通過某種公開的算法,變成固定長度的值(散列值),這個過程可以使用密鑰也可以不使用。這種散列變換是不可逆的,也就是說不能從散列值變成原文。因此,散列變換通常用于驗證原文是否被篡改。典型的算法有:MD5,SHA,CRC等。
關(guān)于CA及數(shù)字證書
什么是CA
CA(Certificate Authority)是數(shù)字證書認(rèn)證中心的簡稱,是指發(fā)放、管理、廢除數(shù)字證書的機構(gòu)。
CA的作用是檢查證書持有者身份的合法性,并簽發(fā)證書(在證書上簽字),以防證書被偽造或篡改,以及對證書和密鑰進(jìn)行管理。
CA 也擁有一個證書(內(nèi)含公鑰)和私鑰。網(wǎng)上的公眾用戶通過驗證 CA 的簽字從而信任 CA ,任何人都可以得到 CA 的證書(含公鑰),用以驗證它所簽發(fā)的證書。
如果用戶想得到一份屬于自己的證書,他應(yīng)先向 CA 提出申請。在 CA 判明申請者的身份后,便為他分配一個公鑰,并且 CA 將該公鑰與申請者的身份信息綁在一起,并為之簽字后,便形成證書發(fā)給申請者。
如果一個用戶想鑒別另一個證書的真?zhèn)?,他就?CA 的公鑰對那個證書上的簽字進(jìn)行驗證,一旦驗證通過,該證書就被認(rèn)為是有效的。
證書的內(nèi)容
數(shù)字證書的格式遵循X.509標(biāo)準(zhǔn),X.509是由國際電信聯(lián)盟(ITU-T)制定的數(shù)字證書標(biāo)準(zhǔn),規(guī)范了公開密鑰認(rèn)證、證書吊銷列表、授權(quán)證書、證書路徑驗證算法等。
證書的內(nèi)容包括:電子簽證機關(guān)的信息、公鑰用戶信息、公鑰、權(quán)威機構(gòu)的簽字和有效期等等。
下圖就表示一個數(shù)字證書包含的內(nèi)容:

我們這里能看到頒發(fā)機構(gòu)簽名是由申請者信息經(jīng)過哈希算法得到hash值,然后再用機構(gòu)的私鑰進(jìn)行加密。所以這個簽名只有辦法機構(gòu)的公鑰才能解密,而一般權(quán)威CA機構(gòu)的根證書(含公鑰)都內(nèi)置在瀏覽器中,所以客戶端接收到這個數(shù)字證書后,先把申請者信息用同樣的哈希算法得到hash值h1,然后用公鑰進(jìn)行辦法機構(gòu)簽名解密得到hash值h2,如果h1==h2,則表示證書是有效的。
SSL/TLS概念
SSL/TLS是加密通信協(xié)議,SSL由NetScape在1994年設(shè)計,1999年互聯(lián)網(wǎng)標(biāo)準(zhǔn)化組織ISOC接替NetScape公司,發(fā)布了SSL的升級版TLS 1.0版?,F(xiàn)在主流的瀏覽器等都支持TLS1.2版本,如iOS9中新增App Transport Security(簡稱ATS)特性,強制http轉(zhuǎn)向https,其中加密通信協(xié)議就需要TLS1.2及以上版本。
SSL/TLS協(xié)議的基本思路是采用公鑰加密法,也就是說,客戶端先向服務(wù)器端索要公鑰,然后用公鑰加密信息,服務(wù)器收到密文后,用自己的私鑰解密。
SSL/TLS協(xié)議的基本過程是這樣的:
(1) 客戶端向服務(wù)器端索要并驗證公鑰。
(2) 雙方協(xié)商生成"對話密鑰"。
(3) 雙方采用"對話密鑰"進(jìn)行加密通信。
所以說SSL/TLS協(xié)議主要是包含非對稱加密(公鑰加密)和對稱加密,用非對稱加密來得到對稱加密的"對話秘鑰",然后用對稱加密來進(jìn)行加密通信。
HTTPS流程步驟

首先看看組成HTTPS的協(xié)議:HTTP協(xié)議和SSL/TLS協(xié)議。HTTP協(xié)議就不用講了,而SSL/TLS就是負(fù)責(zé)加密解密等安全處理的模塊,所以HTTPS的核心在SSL/TLS上面。整個通信如下:
1、瀏覽器發(fā)起往服務(wù)器的443端口發(fā)起請求,請求攜帶了瀏覽器支持的加密算法和哈希算法。
2、服務(wù)器收到請求,選擇瀏覽器支持的加密算法和哈希算法。
3、服務(wù)器下將數(shù)字證書返回給瀏覽器,這里的數(shù)字證書可以是向某個可靠機構(gòu)申請的,也可以是自制的。
4、瀏覽器進(jìn)入數(shù)字證書認(rèn)證環(huán)節(jié),這一部分是瀏覽器內(nèi)置的TLS完成的:
4.1 首先瀏覽器會從內(nèi)置的證書列表中索引,找到服務(wù)器下發(fā)證書對應(yīng)的機構(gòu),如果沒有找到,此時就會提示用戶該證書是不是由權(quán)威機構(gòu)頒發(fā),是不可信任的。如果查到了對應(yīng)的機構(gòu),則取出該機構(gòu)頒發(fā)的公鑰。
4.2 用機構(gòu)的證書公鑰解密得到證書的內(nèi)容和證書簽名,內(nèi)容包括網(wǎng)站的網(wǎng)址、網(wǎng)站的公鑰、證書的有效期等。瀏覽器會先驗證證書簽名的合法性(驗證過程類似上面Bob和Susan的通信)。簽名通過后,瀏覽器驗證證書記錄的網(wǎng)址是否和當(dāng)前網(wǎng)址是一致的,不一致會提示用戶。如果網(wǎng)址一致會檢查證書有效期,證書過期了也會提示用戶。這些都通過認(rèn)證時,瀏覽器就可以安全使用證書中的網(wǎng)站公鑰了。
4.3 瀏覽器生成一個隨機數(shù)R,并使用網(wǎng)站公鑰對R進(jìn)行加密。
5、瀏覽器將加密的R傳送給服務(wù)器。
6、服務(wù)器用自己的私鑰解密得到R。
7、服務(wù)器以R為密鑰使用了對稱加密算法加密網(wǎng)頁內(nèi)容并傳輸給瀏覽器。
8、瀏覽器以R為密鑰使用之前約定好的解密算法獲取網(wǎng)頁內(nèi)容。
身份驗證技術(shù)
所謂身份驗證就是用公鑰生成可信賴的證書。因為非對稱加密存在一個問題就是沒法驗證拿到的公鑰就是服務(wù)端公開的公鑰。
為了解決以上問題,CA應(yīng)用而生(Certifity Authority),數(shù)字證書認(rèn)證機構(gòu)。在網(wǎng)上找到一張圖,一看就明白了

兩個問題
如何保證公鑰不被篡改?
解決方法:將公鑰放在數(shù)字證書中。只要證書是可信的,公鑰就是可信的。那如何保證證書是可信的呢?證書由CA機構(gòu)進(jìn)行頒發(fā),而游覽器內(nèi)置了這些CA機構(gòu)的根證書,只要由這些CA機構(gòu)辦法的數(shù)字證書即是可信的。
為什么不直接使用公鑰加密,還要加上個對稱加密?
公鑰加密是非對稱加密,加密計算量大,而對稱加密運算速度非???。所以這里只有第一次握手時進(jìn)行公鑰加密來得到對稱加密的"對話密鑰",之后的通信就使用對稱加密來進(jìn)行通信了。
加密算法
HTTPS和HTTP的區(qū)別主要為以下四點:
一、https協(xié)議需要到ca申請證書,一般免費證書很少,需要交費。
二、http是超文本傳輸協(xié)議,信息是明文傳輸,https 則是具有安全性加密傳輸協(xié)議。
三、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
四、http的連接很簡單,是無狀態(tài)的;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議比http協(xié)議安全。
HTTPS 的優(yōu)缺點
優(yōu)點
使用HTTPS 協(xié)議可認(rèn)證用戶和服務(wù)器,確保數(shù)據(jù)發(fā)送到正確的客戶機和服務(wù)器;
HTTPS 協(xié)議是由 SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,要比 http 協(xié)議安全,可防止數(shù)據(jù)在傳輸過程中不被竊取、改變,確保數(shù)據(jù)的完整性。
HTTPS 是現(xiàn)行架構(gòu)下最安全的解決方案,雖然不是絕對安全,但它大幅增加了中間人攻擊的成本。
缺點
HTTPS 比HTTP耗費更多服務(wù)器資源(https其實就是建構(gòu)在SSL/TLS之上的 http協(xié)議,所以要比較https比http多用多少服務(wù)器資源,主要看SSL/TLS本身消耗多少服務(wù)器資源。)
耗費的資源多,過程也復(fù)雜,想當(dāng)然訪問不如HTTP高效。大流量網(wǎng)站非必要也不會采用,流量成本太高。
HTTPS 并不能防止站點被網(wǎng)絡(luò)蜘蛛抓取。在某些情形中,被加密資源的URL可僅通過截獲請求和響應(yīng)的大小推得,這就可使攻擊者同時知道明文(公開的靜態(tài)內(nèi)容)和密文(被加密過的明文),從而使選擇密文攻擊成為可能。
SSL 證書需要錢,功能越強大的證書費用越高,個人網(wǎng)站、小網(wǎng)站沒有必要一般不會用?! ?br>
SSL 證書通常需要綁定IP,不能在同一IP上綁定多個域名,IPv4資源不可能支撐這個消耗。