記一次HTTP與HTTPS的區別
記一次HTTP與HTTPS的區別
HTTP與HTTPS的區別
超文字傳輸協議HTTP協議被用於在Web瀏覽器和網站伺服器之間傳遞資訊,HTTP協議以明文方式傳送內容,不提供任何方式的資料加密,
如果攻擊者截取了Web瀏覽器和網站伺服器之間的傳輸報文,就可以直接讀懂其中的資訊,因此,HTTP協議不適合傳輸一些敏感資訊,
比如:信用卡號、密碼等支付資訊。
為了解決HTTP協議的這一缺陷,需要使用另一種協議:安全套接字層超文字傳輸協議HTTPS,為了資料傳輸的安全,
HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證伺服器的身份,併為瀏覽器和伺服器之間的通訊加密。
一、HTTP和HTTPS的基本概念
HTTP:是網際網路上應用最為廣泛的一種網路協議,是一個客戶端和伺服器端請求和應答的標準(TCP),
用於從WWW伺服器傳輸超文字到本地瀏覽器的傳輸協議,它可以使瀏覽器更加高效,使網路傳輸減少。
HTTPS:是以安全為目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。
HTTPS協議的主要作用可以分為兩種:一種是建立一個資訊保安通道,來保證資料傳輸的安全;另一種就是確認網站的真實性。
二、HTTP與HTTPS有什麼區別?
HTTP協議傳輸的資料都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私資訊非常不安全,為了保證這些隱私資料能加密傳輸,
於是網景公司設計了SSL(Secure Sockets Layer)協議用於對HTTP協議傳輸的資料進行加密,從而就誕生了HTTPS。
HTTPS加密、加密、及驗證過程,如下圖所示:
簡單來說,HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,要比http協議安全。
HTTPS和HTTP的區別主要如下:
1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
2、http是超文字傳輸協議,資訊是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
3、http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。
4、http的連線很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。
三、HTTPS的工作原理
我們都知道HTTPS能夠加密資訊,以免敏感資訊被第三方獲取,所以很多銀行網站或電子郵箱等等安全級別較高的服務都會採用HTTPS協議。
1、客戶端發起HTTPS請求
這個沒什麼好說的,就是使用者在瀏覽器裡輸入一個https網址,然後連線到server的443埠。
2、服務端的配置
採用HTTPS協議的伺服器必須要有一套數字證書,可以自己製作,也可以向組織申請,區別就是自己頒發的證書需要客戶端驗證通過,
才可以繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面(startssl就是個不錯的選擇,有1年的免費服務)。
這套證書其實就是一對公鑰和私鑰,如果對公鑰和私鑰不太理解,可以想象成一把鑰匙和一個鎖頭,只是全世界只有你一個人有這把鑰匙,
你可以把鎖頭給別人,別人可以用這個鎖把重要的東西鎖起來,然後發給你,因為只有你一個人有這把鑰匙,所以只有你才能看到被這把鎖鎖起來的東西。
3、傳送證書
這個證書其實就是公鑰,只是包含了很多資訊,如證書的頒發機構,過期時間等等。
4、客戶端解析證書
這部分工作是有客戶端的TLS來完成的,首先會驗證公鑰是否有效,比如頒發機構,過期時間等等,如果發現異常,則會彈出一個警告框,
提示證書存在問題。
如果證書沒有問題,那麼就生成一個隨機值,然後用證書對該隨機值進行加密,就好像上面說的,把隨機值用鎖頭鎖起來,
這樣除非有鑰匙,不然看不到被鎖住的內容。
5、傳送加密資訊
這部分傳送的是用證書加密後的隨機值,目的就是讓服務端得到這個隨機值,以後客戶端和服務端的通訊就可以通過這個隨機值來進行加密解密了。
6、服務段解密資訊
服務端用私鑰解密後,得到了客戶端傳過來的隨機值(私鑰),然後把內容通過該值進行對稱加密,所謂對稱加密就是,
將資訊和私鑰通過某種演算法混合在一起,這樣除非知道私鑰,不然無法獲取內容,而正好客戶端和服務端都知道這個私鑰,
所以只要加密演算法夠彪悍,私鑰夠複雜,資料就夠安全。
7、傳輸加密後的資訊
這部分資訊是服務段用私鑰加密後的資訊,可以在客戶端被還原。
8、客戶端解密資訊
客戶端用之前生成的私鑰解密服務段傳過來的資訊,於是獲取瞭解密後的內容,整個過程第三方即使監聽到了資料,也束手無策。
四、搜尋引擎對HTTPS的態度
百度推出了全站HTTPS加密搜尋服務,以此解決“第三方”對使用者隱私的嗅探和劫持,其實,早在2010年5月份,
谷歌便開始提供HTTPS加密搜尋服務,在HTTPS網頁的抓取問題上,百度在2014年9月份的一份公告中表示“百度不會主動抓取HTTPS網頁”,
谷歌在演算法更新中則表示“同等條件下,使用HTTPS加密技術的站點在搜尋排名上更具優勢”。
那麼,在這種大環境下,站長是否該採用“具有風險”的HTTPS協議呢?HTTPS對搜尋引擎的SEO影響又如何呢?
1、谷歌的態度
谷歌在HTTPS站點的收錄問題上與對HTTP站點態度並無什麼不同之處,甚至把“是否使用安全加密”(HTTPS)作為搜尋排名演算法中的一個參考因素,
採用HTTPS加密技術的網站能得到更多的展示機會,排名相對同類網站的HTTP站點也更有優勢。
而且谷歌曾明確表示“希望所有的站長都能將使用HTTPS協議,而非HTTP”更是表明了其對達到“HTTPS everywhere”這一目標的決心。
2、百度的態度
雖然百度曾表示“不會主動抓取https網頁”,但對於“很多https網頁無法被收錄”也是“耿耿於懷”,去年9月份,
百度曾就“https站點如何建設才能對百度友好”問題釋出了一篇文章,給出了“提高https站點的百度友好度”的四項建議及具體操作。
此外,近日的“百度全站HTTPS加密搜尋”事件也再次彰顯了百度對HTTPS加密的重視,可見,百度並不“反感”HTTPS站點,所以“不主動抓取”應該也只是暫時的吧!
五、HTTPS要比HTTP多用多少伺服器資源?
HTTPS其實就是建構在SSL/TLS之上的 HTTP協議,所以,要比較HTTPS比HTTP多用多少伺服器資源,大多數人認為主要看SSL/TLS本身消耗多少伺服器資源。
HTTP使用TCP三次握手建立連線,客戶端和伺服器需要交換3個包(具體可檢視我部落格《HTTP服務的七層架構技術解析及運用》的相關介紹);
HTTPS除了TCP的三個包,還要加上ssl握手需要的9個包,所以一共是12個包。
HTTP建立連線,按照下面連結中針對Computer Science House的測試,是114毫秒;HTTPS建立連線,耗費436毫秒,ssl部分花費322毫秒,
包括網路延時和ssl本身加解密的開銷(伺服器根據客戶端的資訊確定是否需要生成新的主金鑰;伺服器回覆該主金鑰,
並返回給客戶端一個用主金鑰認證的資訊;伺服器向客戶端請求數字簽名和公開金鑰)。
當SSL連線建立後,之後的加密方式就變成了3DES等對於CPU負荷較輕的對稱加密方式,相對前面SSL建立連線時的非對稱加密方式,
對稱加密方式對CPU的負荷基本可以忽略不記,所以問題就來了,如果頻繁的重建ssl的session,對於伺服器效能的影響將會是致命的,
儘管開啟HTTPS保活可以緩解單個連線的效能問題,但是對於併發訪問使用者數極多的大型網站,
基於負荷分擔的獨立的SSL termination proxy就顯得必不可少了,Web服務放在SSL termination proxy之後,
SSL termination proxy既可以是基於硬體的,譬如F5;也可以是基於軟體的,譬如維基百科用到的就是Nginx。
那採用HTTPS後,到底會多用多少伺服器資源,2010年1月Gmail切換到完全使用HTTPS, 前端處理SSL機器的CPU負荷增加不超過1%,
每個連線的記憶體消耗少於20KB,網路流量增加少於2%,由於Gmail應該是使用N臺伺服器分散式處理,所以CPU負荷的資料並不具有太多的參考意義,
每個連線記憶體消耗和網路流量資料有參考意義,這篇文章中還列出了單核每秒大概處理1500次握手(針對1024-bit 的 RSA),這個資料很有參考意義。
Heartbleed這個被稱作史上最大的網路安全漏洞,想必很多人都有所耳聞,Heartbleed之所以能夠出現,其實和我們這個問題關係還不小,
前面我們談到了頻繁重建SSL/TLS的session對於伺服器影響是致命的,所以,聰明的RFC在2012年提出了RFC6520 TLS的心跳擴充套件,
這個協議本身是簡單和完美的,通過在客戶端和伺服器之間來回傳送心跳的請求和應答,保活TLS session,減少重建TLS的session的效能開銷,
令人遺憾的是,openssl在實現這個心跳擴充套件時,犯了一個低階的錯誤,沒有對收到的心跳請求進行長度檢查,直接根據心跳請求長度拷貝資料區,
導致簡單的心跳應答中可能包含了伺服器端的核心資料區內容,使用者名稱,密碼,信用卡資訊,甚至伺服器的私有金鑰都有可能洩露。
六、HTTPS的優點
正是由於HTTPS非常的安全,攻擊者無法從中找到下手的地方,從站長的角度來說,HTTPS的優點有以下2點:
1、SEO方面
谷歌曾在2014年8月份調整搜尋引擎演算法,並稱“比起同等HTTP網站,採用HTTPS加密的網站在搜尋結果中的排名將會更高”。
2、安全性
儘管HTTPS並非絕對安全,掌握根證書的機構、掌握加密演算法的組織同樣可以進行中間人形式的攻擊,但HTTPS仍是現行架構下最安全的解決方案,主要有以下幾個好處:
(1)、使用HTTPS協議可認證使用者和伺服器,確保資料傳送到正確的客戶機和伺服器;
(2)、HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,要比http協議安全,可防止資料在傳輸過程中不被竊取、
改變,確保資料的完整性。
(3)、HTTPS是現行架構下最安全的解決方案,雖然不是絕對安全,但它大幅增加了中間人攻擊的成本。
七、HTTPS的缺點
雖然說HTTPS有很大的優勢,但其相對來說,還是有些不足之處的,具體來說,有以下2點:
1、SEO方面
據ACM CoNEXT資料顯示,使用HTTPS協議會使頁面的載入時間延長近50%,增加10%到20%的耗電,此外,HTTPS協議還會影響快取,增加資料開銷和功耗,甚至已有安全措施也會受到影響也會因此而受到影響。
而且HTTPS協議的加密範圍也比較有限,在黑客攻擊、拒絕服務攻擊、伺服器劫持等方面幾乎起不到什麼作用。
最關鍵的,SSL證書的信用鏈體系並不安全,特別是在某些國家可以控制CA根證書的情況下,中間人攻擊一樣可行。
2、經濟方面
(1)、SSL證書需要錢,功能越強大的證書費用越高,個人網站、小網站沒有必要一般不會用。
(2)、SSL證書通常需要繫結IP,不能在同一IP上繫結多個域名,IPv4資源不可能支撐這個消耗(SSL有擴充套件可以部分解決這個問題,
但是比較麻煩,而且要求瀏覽器、作業系統支援,Windows XP就不支援這個擴充套件,考慮到XP的裝機量,這個特性幾乎沒用)。
(3)、HTTPS連線快取不如HTTP高效,大流量網站如非必要也不會採用,流量成本太高。
(4)、HTTPS連線伺服器端資源佔用高很多,支援訪客稍多的網站需要投入更大的成本,如果全部採用HTTPS,基於大部分計算資源閒置的假設的VPS的平均成本會上去。
(5)、HTTPS協議握手階段比較費時,對網站的相應速度有負面影響,如非必要,沒有理由犧牲使用者體驗。
八、網站是否需要採用HTTPS加密?
雖然谷歌和百度都對HTTPS“另眼相看”,但這並不意味著站長們都應該把網站協議轉換成HTTPS的!
早在去年9月份,Moz就針對“採用HTTPS協議”展開了一項調查,結果如下圖:

注:調查開展時間在谷歌宣佈“使用HTTPS協議的網站可以獲得更好的排名”後
如上圖所示,在此項調查中,17.24%的站長表示其網站已採用HTTPS協議;24.9%的站長表示正在搭建中;57.85%的站長表示目前仍無此項計劃,
從這些資料可以看出,當時大部分的站長還是沒有選擇使用HTTPS協議,那麼,站長們到底該不該選擇有利有弊的HTTPS協議呢?
從這些資料可以看出,當時大部分的站長還是沒有選擇使用HTTPS協議,那麼站長們到底該不該選擇有利有弊的HTTPS協議呢?
首先說說谷歌方面,雖然谷歌不斷強調“使用HTTPS加密技術的網站能獲得更好的排名”,但也不能排除這是“別有用心”之舉。
國外分析師就曾針對這一問題表示:谷歌之所以做出這一舉動(更新演算法,將是否採用HTTPS加密技術作為搜尋引擎排名的的一個參考因素)
也許並非是為了提高使用者的搜尋體驗和網際網路安全問題,只是為了挽回在“稜鏡門”醜聞中的“損失”,這是一個典型的打著“犧牲小我”旗號的利我之
舉,高舉“安全影響排名”旗幟、高呼“HTTPS everywhere”口號,然後不費吹灰之力讓廣大站長們心甘情願的投入HTTPS協議陣營。
然後是百度方面,雖然百度宣佈全站進入HTTPS加密搜尋時代,但至今仍“不會主動抓取HTTPS頁面”,也從未就“未來是否會調整演算法”問題表過態,
如果站長在採用HTTPS協議後仍需製作個“http可訪問版”、或是通過301重定向“自動跳入https版本”,那麼,採用HTTPS協議的代價就不再只是多花money的問題了。
在思考“到底該不該採用HTTPS協議”這個問題時,多考慮考慮怎樣做對你的使用者更友好吧
如果你的網站屬於電子商務、金融、社交網路等領域的話,那最好是採用HTTPS協議;如果是部落格站點、宣傳類網站、分類資訊網站、
或者是新聞網站之類的話,大可不必跟風而行,畢竟HTTPS協議不僅耗錢,浪費精力,而且暫時也不利於網站的SEO工作。詳情可檢視:
我到底該不該用“影響搜尋排名”的HTTPS?
九、站長如何搭建HTTPS站點?
說到HTTPS站點的搭建,就不得不提到SSL協議,SSL是Netscape公司率先採用的網路安全協議,它是在傳輸通訊協議(TCP/IP)上實現的一種安全
協議,採用公開金鑰技術,SSL廣泛支援各種型別的網路,同時提供三種基本的安全服務,它們都使用公開金鑰技術。
1、SSL的作用
(1)、認證使用者和伺服器,確保資料傳送到正確的客戶機和伺服器;
(2)、加密資料以防止資料中途被竊取;
(3)、維護資料的完整性,確保資料在傳輸過程中不被改變。
而SSL證書指的是在SSL通訊中驗證通訊雙方身份的數字檔案,一般分為伺服器證書和客戶端證書,我們通常說的SSL證書主要指伺服器證書,
SSL證書由受信任的數字證書頒發機構CA(如VeriSign,GlobalSign,WoSign等),在驗證伺服器身份後頒發,
具有伺服器身份驗證和資料傳輸加密功能,分為擴充套件驗證型(EV)SSL證書、組織驗證型(OV)SSL證書、和域名驗證型(DV)SSL證書。
2、SSL證書申請的3個主要步驟
對於SSL證書的申請,主要有以下3個步驟:
(1)、製作CSR檔案
所謂CSR就是由申請人制作的Certificate Secure Request證書請求檔案,製作過程中,系統會產生2個金鑰,一個是公鑰就是這個CSR檔案;另外一個是私鑰,存放在伺服器上。
要製作CSR檔案,申請人可以參考WEB SERVER的文件,一般APACHE等,使用OPENSSL命令列來生成KEY+CSR2個檔案,Tomcat,JBoss,Resin等使用KEYTOOL來生成JKS和CSR檔案,IIS通過嚮導建立一個掛起的請求和一個CSR檔案。
(2)、CA認證
將CSR提交給CA,CA一般有2種認證方式:
①、域名認證:一般通過對管理員郵箱認證的方式,這種方式認證速度快,但是簽發的證書中沒有企業的名稱。
②、企業文件認證:需要提供企業的營業執照,一般需要3-5個工作日。
也有需要同時認證以上2種方式的證書,叫EV證書,這種證書可以使IE7以上的瀏覽器位址列變成綠色,所以認證也最嚴格。
(3)、證書的安裝
在收到CA的證書後,可以將證書部署上伺服器,一般APACHE檔案直接將KEY+CER複製到檔案上,然後修改HTTPD.CONF檔案;TOMCAT等,
需要將CA簽發的證書CER檔案匯入JKS檔案後,複製上伺服器,然後修改SERVER.XML;IIS需要處理掛起的請求,將CER檔案匯入。
十、免費證書推薦
使用SSL證書不僅能讓資訊的安全性更有保障,還可以提高使用者對於網站的信任度,但鑑於對建站成本的考慮,很多站長對其望而卻步,
在網路上免費始終是一個永遠不過時的市場,主機空間有免費的,而SSL證書自然也有免費的,此前,便有訊息稱,Mozilla、思科、Akamai、
IdenTrust、EFF、以及密歇根大學的研究人員將開啟Let’s Encrypt CA專案,計劃從今夏開始,為網站提供免費SSL證書以及證書管理服務
(注:如需更高階的複雜證書,則需付費),同時,還降低了證書安裝的複雜程度,安裝時間僅需20-30秒。
而需要複雜證書的往往是大中型網站,諸如個人部落格之類的小型站點完全可以先嚐試免費SSL證書,如果想要購買低價SSL證書可檢視站長之家之前釋出的文章:如何購買廉價SSL證書?。
下面我的部落格再為大家介紹幾款免費SSL證書,比如:Flare/">CloudFlare SSL、StartSSL、Wosign沃通SSL、NameCheap等。
1、CloudFlare SSL
CloudFlare是美國一家提供CDN服務的網站,在世界各地都有自己的CDN伺服器節點,國內外很多大型公司或者網站都在使用CloudFlare的CDN
服務,當然國內站長最常用的就是CloudFlare的免費CDN,加速也很好,CloudFlare提供的免費SSL證書是UniversalSSL,即通用SSL,
使用者無需向證書發放機構申請和配置證書就可以使用的SSL證書,CloudFlare向所有使用者(包括免費使用者)提供SSL加密功能,
web介面5分鐘內就設定好證書,24小時內完成自動部署,為網站的流量提供基於橢圓曲線數字簽名演算法(ECDSA)的TLS加密服務。
2、StartSSL
StartSSL是StartCom公司旗下的SSL證書,提供免費SSL證書服務,且StartSSL被包括Chrome、Firefox、IE在內的主流瀏覽器支援,
幾乎所有的主流瀏覽器都可以正常識別StartSSL,任何個人都可以從StartSSL中申請到免費一年的SSL證書。
3、Wosign沃通SSL
Wosign沃通是國內一家提供SSL證書服務的網站,其免費的SSL證書申請比較簡單,線上開通,一個SSL證書只能對應一個域名,支援證書狀態線上查詢協議(OCSP)。
4、NameCheap
NameCheap是一家領先的ICANN認可的域名註冊和網站託管公司,成立於2000年,該公司提供免費DNS解析,網址轉發
(可隱藏原URL,支援301重定向)等服務,此外,NameCheap還提供了一年的SSL證書免費服務。