10. HTTPS 加密連線
10-1. 認識非對稱加密
近年來由於上網安全意識的提升,越來越多的網站使用 HTTPS 加密連線,網址像這樣前面有個鎖的符號,點下去會顯示已建立安全連線:
這個原理是什麽呢? 瀏覽器和伺服器之間,是如何安全連線的?如何保障中間傳輸的過程,不會被人偷聽、被人修改內容。
沒有加密的 HTTP 連線,可以透過監聽網路封包,就可以知道瀏覽器傳輸的內容。例如在咖啡廳上網,駭客可以透過監聽無線網路,看到你上網的一舉一動。有些咖啡廳可以在網頁中置入廣告 Banner,就是因為連線是走 HTTP 未加密的關系,所以很容易就可以修改網頁內容。
我們在 6-1 教過什麽是對稱密鑰加密算法,透過密鑰就可以傳輸密文。
但是對稱密鑰加密方法,在瀏覽器和伺服器連線的情境,有個致命的缺點,就是一開始連線時如何交換密鑰。雙方都要知道密鑰,才能知道對方講了什麽話。
既然一開始連線就是不安全的,在把密鑰告訴對方的過程中,這個密鑰也就外洩了…
所幸聰明的數學家發明了非對稱加密,可以在不交換密鑰的情況下,解決這個問題。
在非對稱加密算法中,會有兩把鑰匙,一把叫做公鑰、一把叫做密鑰。
- 透過公鑰加密的密文,只有密鑰能夠解開
- 透過密鑰加密的密文,只有公鑰能夠解開
伺服器會將公鑰公開給瀏覽器知道,瀏覽器會用公鑰加密內容,傳給伺服器,伺服器用密鑰解開。反之伺服器用密鑰加密,瀏覽器用公鑰解開。如此就解決了一開始密鑰交換的問題。
這種方式也用在 SSH 連線認證和加密連線 1. 在部署 Linux 伺服器時,我們會將自己的公鑰放在伺服器上,這樣登入的時候就不需要打帳號密碼,伺服器就能認證你 2. 在 Git 之中,我們會將自己的公鑰放在 Github 上,這樣 git push 和 pull 時,Github 就能做認證。
剩下信任問題,我們怎麽知道這個公鑰真的代表這個網站主?這就是為什麽我們需要申請或購買網站安全憑證(SSL certificate)的原因。網站主需要向權威機構購買申請或購買,經過一些認證程序後,才能獲得 HTTPS 需要的安全憑證。而用戶的瀏覽器中,在出場時就會預設相信一些權威機構所核發的安全憑證,以此建構出信任鍊。
上述是簡化的說明,詳細可以參考以下文章:
那麽要如何在伺服器上安裝 HTTPS 呢? 步驟會比較複雜,我們會在進階的部署教程再說以說明。
10-2 結語
希望本課程可以有效提供大家的網站安全意識,「害人之心不可有,防人之心不可無」,再次提醒大家切勿以身試法。
對網路安全有興趣的朋友,推薦閱讀阿裡巴巴的網路安全專家所寫的入門書:白帽子講Web安全這本書。