Http 與 https 通訊 協定 之 差異 為何

相信大多數的讀者,對這個畫面應該都不陌生吧?當前最熱門的瀏覽器 Google Chrome 從 Chrome 69 開始,會在網站使用 HTTP 作為傳輸協定時,在網址列提示使用者「不安全」,甚至出現上圖的提示畫面,藉此來要求網站開發者盡快將網站轉為透過 HTTPS 傳輸資料,甚至 在今年底的 Chrome 79,將會逐步封鎖 HTTPS 網頁中以 HTTP 下載的內容;但 HTTP 與 HTTPS 的差別到底是什麼?HTTPS 又是如何讓資料傳遞變安全的呢?

HTTP 的資料傳輸

HTTP 全名是 超文本傳輸協定(HyperText Transfer Protocol),內容只規範了客戶端請求與伺服器回應的標準,實際上是藉由 TCP 作為資料的傳輸方式。

更多 TCP 的傳輸協議內容及詳細的過程可以參考 這篇文章。

例如使用者送出了一個請求,經過 TCP 的三次握手之後,資料便能透過 TCP 傳遞給伺服器,並等待伺服器回應;然而這個一來一往的傳輸過程,資料都是 明文;如果傳遞的過程中有惡意竊聽者,資料便有機會被窺探、盜用。

什麼?你說沒有人會這麼無聊?其實非常多。像是 惡意使用者偽裝成公用無線網路來釣魚,當使用者連上之後,便可以擷取封包,窺探傳輸的內容;再說,即使扣除掉這種不知名的免費無線網路,你也沒辦法確認網路連線到目標伺服器的路上,每個節點都不會窺探、側錄你所傳遞的資料。

傳遞的內容不加密,就有如在網路上裸奔一樣;為了避免這些事情,我們需要把資料加密。

掌握後端開發實務、成為軟體工程師,3 分鐘小測驗,找到你的學習起點

加密

加密 指的是把明文資料轉換成無法讀取的內容 - 密文,並且密文能藉由特定的解密過程,將其回復成明文。

讓部分開發者時常混淆在一起的是 雜湊,可以參考 這一篇。

共用金鑰加密

像是可能大家都有聽過的 凱薩加密法,就是一個非常基本的加密方式:將明文的字母全部位移固定的距離,解密時再位移回來;例如明文是 「EGG」,位移距離(金鑰)為 3,那麼加密後的密文就會是「HJJ」。

當然,真實的環境不會用這種很容易被解出來的加密方式,而是會透過例如 AES 等方式進行加密;但兩者同樣的是,都會透過同一個金鑰來進行加密與解密,因此我們把這類的加密方式稱為「共用金鑰加密」,或是「對稱式加密」。

經過共用金鑰加密,資料傳遞就安全了嗎?其實不然。想像一下網路通訊的情況,如果通訊的兩人需要透過共用金鑰加密進行通訊,勢必要先讓兩人都知道要用來加密的金鑰是什麼,那麼當其中一方決定要發起通訊時,就必須要先直接傳遞金鑰給對方,但這個金鑰是沒有加密、可能會被窺探的,如果竊聽者在通取開始前就開始竊聽,便能得到密鑰,後面傳遞的密文,也就可能會被竊聽者窺探。

Http 與 https 通訊 協定 之 差異 為何

圖片來自 演算法圖鑑 - 第 5 章:安全性演算法

看來要安全的進行通訊,就需要其他的加密方式;例如 迪菲-赫爾曼密鑰交換,或是我們接下來要談的「公開金鑰加密」。

公開金鑰加密

公開金鑰加密,也有人之稱為「非對稱式加密」;在這個加密規則中,每個通訊者都會有成對的兩把鑰匙:一把「公鑰」,一把「私鑰」,顧名思義,公鑰是所有人都看得到的,而私鑰是只有通訊者自己才看得到的;每個資料被任意一把鑰匙加密後,必須要透過與之配對的另一把鑰匙才能解密;例如我用我的私鑰加密的密文,就只能被我的公鑰解密,反之亦同。

在這樣的規則下,進行通訊會發生什麼事呢?假想一下:Alice 和 Bob 準備進行通訊,而 Eve 是不懷好意的竊聽者;Alice 把要傳遞的明文經過 Bob 的公鑰進行加密後,再進行傳遞,由於 Bob 的私鑰只有 Bob 擁有,即使 Eve 竊取到了密文,也無法將其解密回明文。

這樣子是不是就可以安心進行通訊了呢?很遺憾的,還是沒辦法;因為通訊的雙方,雖然看得到對方的公鑰,但沒辦法證明這個公鑰是通訊的對方所擁有。

我們設想另一個情況:Alice 和 Bob 準備進行通訊,而 Eve 是不懷好意的竊聽者,且 Alice 和 Bob 都把 Eve 當成是通訊的對方;這樣的情境下,Alice 把明文用 Eve 的公鑰加密後,將密文傳遞出來,隨即被 Eve 攔截、解密後,再用 Bob 的公鑰重新加密明文,再傳遞給 Bob,反之亦同,這樣子 Alice 和 Bob 都不會知道有 Eve 的存在,但 Eve 卻成功的取得了通訊內容;這就叫做 中間人攻擊。

Http 與 https 通訊 協定 之 差異 為何

圖片來自 演算法圖鑑 - 第 5 章:安全性演算法

那怎麼辦呢?我們需要一個能證明公鑰屬於誰的方法。

數位憑證

因此就出現了 憑證頒發機構,例如 Alice 和 Bob 要準備進行通訊;在開始之前,Alice 必須先提供公鑰 & Email,向憑證頒發機構申請憑證,憑證頒發機構核可後,便會透過 數位簽章 包裹 Alice 提供的資料,製作成 數位憑證。

憑證的詳細格式可以參考 Wiki - X.509

當通訊開始時,Alice 會先傳遞數位憑證給 Bob,而 Bob 便可以透過數位簽章,來證明憑證的內容確實是屬於 Alice 的;如此一來,證明公鑰是屬於誰的問題就被解決了,即使竊聽者想要從中竊聽,也因為憑證頒發機構的數位簽章,竊聽者將無從介入通訊過程。

這樣聽起來,憑證頒發機構非常重要啊,全世界網站這麼多,需要進行通訊的請求自然也非常多,不可能全部都詢問同一個機構吧?沒錯,實際上的憑證頒發,會如同下圖一樣:

Http 與 https 通訊 協定 之 差異 為何

終端數位憑證由中介機構簽發、中介機構的憑證由更上游的中介機構簽發,直到源頭,它的憑證由自己簽發,這樣就形成了一個 信任鏈。

簡單的說,因為我信任 A,所以 A 擔保的 B、C、D,以及 B 擔保的 E、F、G,我全部都相信。

瞭解網路應用程式操作原理,HTTP、網域、RESTful API、MVC 設計核心概念,申請 5 天免費試讀

HTTPS

說了這麼多加密,所以到底什麼是 HTTPS?

HTTPS 全名 超文本傳輸安全協定,那個 S 就是 Secure 的意思;HTTPS 透過 HTTP 進行通訊,但通訊過程使用 SSL/TLS 進行加密,藉由類似於前述的加密方式,在 HTTP 之上定義了相對安全的資料傳輸方法。

由於非對稱加密的運算量較高,傳遞回應較慢;實際的架構上,會透過公開金鑰加密傳遞出共用的金鑰,再透過共用金鑰加密進行後續的傳遞,兼顧了安全性及傳遞速度。

轉職軟體工程師,訂閱電子報,獲取更多技術新知、自學資源與市場趨勢

結語

今天從加密的方式出發,考慮每種加密通訊過程中可能受到的攻擊,逐步演變成現今最普遍的加密方式,並藉此來說明 HTTP 與 HTTPS 之間的差異,希望能幫助讀者您理解網路通訊中最基礎的安全知識。

(本文作者是 ALPHA Camp 課程 學期三:軟體工程師養成,前端工程師 Gary,擁有四年以上軟體開發經驗,現職為奧丁丁集團的開發工程師。轉載自前端三十系列文)

Http 與 https 通訊 協定 之 差異 為何

半路出家網站工程師;半生熟的前端加上一點點的後端。喜歡音樂,喜歡學習、分享。也喜歡當個遊戲宅。相信一切安排都是最好的路。

See All Post

HTTP跟HTTPS近年來在網路界中討論度非常高的話題,不只是工程師、網路管理者需要具備的基本常識,就連使用者也要知道兩者究竟有什麼差異,因為這牽涉到資訊安全和隱私的部分。

今天就要帶你來了解,為什麼HTTPS比HTTP重要?兩者之間究竟有什麼差異?HTTPS跟SSL之間又存在什麼樣的關聯?

HTTP是什麼?

Http 與 https 通訊 協定 之 差異 為何
HTTP的全名是「超文本傳輸協定 (Hyper Text Transfer Protocol)」,簡單來說是以TCP作為網路資料傳輸的方式。

讓我們舉個生活化的例子,假如助理要上傳文件到雲端給主管審核,流程便會是:助理上傳文件(發出請求)→經過TCP傳送資料到伺服器→抵達網路→主管開啟或下載檢視。

現在網路技術發達的時代,對於這一連串的流程可能不會覺得有異議;但你知道在5年前,其實很多網站執行的這個「傳輸動作」,很可能在無意間被有心人士,甚至是駭客偷窺或將資料用在其他地方嗎?

相信過去大家都看過不少相關新聞,某某公司/電商網站被駭客入侵,竊取了會員資料/帳戶資料,之後轉賣給詐騙集團或推銷公司等利用。這就是因為HTTP雖然可以傳輸資料,卻沒有完善的安全機制,讓有心人士有機可趁。

HTTPS是什麼?

有鑑於HTTP傳輸協定發生太多資料被竊取的案例,因此後來衍生出HTTPS,全名為「超文本傳輸安全協定 (Hyper Text Transfer Protocol Secure)」。HTTPS基本上同樣是資料傳輸的工具,但在傳輸過程中是使用SSL或TLS,多了一道加密的手續,如此一來就算有心人士要竊取,看到的也只是加密符號或一堆亂碼而已。

但是HTTPS在剛推出的時候有個缺點,就是因為加密需要運算的資料較多,導致網路速度變得很慢。因此後來才又發明金鑰功能,讓網路資料在進行傳輸時既安全、速度也不會太慢。

HTTP與HTTPS的差異

如果單從字面上來看,很明顯的發現後者多了一個「S」,但正因為多了這個S,使HTTPS的的重要性遠遠大於HTTP。

這個「S」其實就是安全(Secure)的意思,你可以想像就是在原本的傳輸線路上多加了一層保護罩。至於要如何判斷哪些網站有加密、哪些網站沒加密呢?過去我們可能看不太出來,但幾年前各大瀏覽器開始做改版。

如果是HTTP開頭的網站,旁邊會顯示一個驚嘆號,有些甚至會有彈跳視窗告訴你「這個網站不安全,是否還要繼續瀏覽?」;如果是HTTPS開頭的網站,旁邊則會出現一個鎖頭,點擊鎖頭就會告訴你「已建立安全連線,若需要輸入個資或信用卡資料,將會以加密方式進行傳輸,所以不需擔心外洩。」

也因此我們可以這樣認定:同樣是在網站中輸入「戰國策」三個字,HTTP開頭的網站在傳輸過程中仍然是以「戰國策」進行傳輸;但HTTPS開頭的網站則會以「戰**」或「dfjioor32or23f」這樣的形式進行傳輸。

HTTPS與SSL的關係

Http 與 https 通訊 協定 之 差異 為何
HTTPS常被拿來跟SSL一起討論,SSL並不是HTTPS裡面的「S」,而是一種傳輸過程。

簡單來說,HTTPS是使用者透過電腦傳輸資料到伺服器時的一道資安防護罩;SSL則是為了防止資料傳輸過程被有心人士破解或修改的工具。

延伸閱讀:什麼是SSL?該如何安裝?

為什麼HTTPS變得那麼重要?

雖然HTTPS這樣的技術早在2008年就有了,但當時並未普及。直到2010年開始發生駭客入侵網站竊取帳號的事件,這引起Google的重視,所以從那時候開始Google網站就使用HTTPS進行資料傳輸。

在2018年時,Google更做了一次大幅改版,要求所有在他們搜尋結果底下的網站都「建議」使用HTTPS,如果沒有使用的話,將會跳出警告標語,讓使用者看到之後為之卻步,不敢使用你的網站。

而不敢使用你的網站代表什麼意思?這就會牽扯到近期大家非常在意的「網站排名」。Google將HTTPS視為SEO優化的一個重要因子,所以如果你的網站還在使用HTTP,起步上來說就輸人家一大截了。

從HTTP轉換成HTTPS後需要注意的3件事

1. 301轉址

雖然從HTTP變成HTTPS感覺好像只是多了一個字母,但在程式面中卻是無比浩大的工程,因為那等於你把網站搬家的意思。

如果你沒有對新舊網址做301轉址設定,當使用者搜尋到你的舊站,發現網頁錯誤(404 Not Found)或一片空白,他們會直接跳出去找其他服務商,你就因此錯失一次做生意的機會。

所以要透過301轉址設定,讓使用者即使點到舊站,也會自動轉址到新站,這是非常重要的,在網址換成HTTPS之後第一件事就請先設定好301轉址。

2. 重新提交Sitemap

通常在網站完成後,大家都會跟Google提交Sitemap,讓網頁能見度變高。而網址升級成HTTPS後,同樣要再次提交Sitemap,這樣新網站才能被找到。

3. 更新監控網站資訊

無論是Google Search Console、GA、百度、Bing等,這些都要同步更新,才不會讓這些監控網站繼續分析舊網站。

總結

根據以上的說明,相信大家都知道網站使用HTTPS的重要性。從今以後別再使用HTTP了,可以的話趕快換成有加密版本的HTTPS吧!

如果有需要HTTPS或SSL的安裝設定服務,歡迎洽詢0800-003-191戰國策或上網訂購 https://www.nss.com.tw/sslcert/ ,讓專業的人協助你,比起自己摸索還更加有效率喔!

延伸閱讀我司相關服務

主機服務介紹 SSL安全性憑證服務介紹 促銷專區服務介紹