Skip to main content

HTTP和HTTPS

Super great site : How HTTPS works - How HTTPS works

HTTP​

HTTP是超文本傳輸協定,在網路上電腦間溝通的一種方式,主要用在網頁上。要求瀏覽特定網頁、輸入訂單等都會需要溝通(發出請求)。

Request​
  • start line : http method/路徑/http版本

  • header : 額外資訊。可能關於發送地或目的地,或body內的資料類型等等。

  • body : 要送過去的東西

    欄位範例
    start linePOST /order HTTP/1.1
    headerHost : api.com
    User-Agent : Mozilla/5.0(windows)Chrome
    Accept : text/plain
    Content-Type:text/plain
    Content-Length:43
    body{"quantity":3,"total_price":2330}

Response

欄位範例
start lineHTTP/1.1 200 OK
headerServer:nginx
Content-Type:text/plain
Content-Length:7
Date:Fri, 22 Aug 2020 12:25:01 GMT
bodysuccess

HTTPS​

因為HTTP是用明文去傳送,等於卡號密碼等機密資料直接坦露無遺,因為網路是公開的!!!

HTTPS 是 HTTP加上Secure,主要是利用SSL/TLS去做加密,如果有人竊聽也會是一串亂碼。主要保證下面三點:

  1. Privacy所有資訊都是加密傳播,第三方無法竊聽
  2. Integrity具校驗機制,一旦被竄改,通訊雙發會立刻發現
  3. Identification配備身分證書,防止身分被冒充

加密如何運作​

加密主要有兩種方式:對稱和非對稱

對稱指的是只有一把鑰匙,只要有鑰匙的人都可以開,你必須要小心保管,並且要分享給別人時,也要用最安全的方式。

非對稱指的是有兩把鑰匙,公鑰與私鑰。自己持有私鑰,並將公鑰透過網路發送給想要傳送訊息給你的人,讓他們以此鑰匙將訊息加密,因為只有你有私鑰,所以就只有你可以打開這封信。

如何將連線變成安全的​

網址列最左邊有一個鎖的符號,若其正常顯示,代表此連線受到加密保護。

可以看到網址列有我們現在正訪問的網站地址,代表我們的瀏覽器正在和host此網站的電腦進行連線以安全的傳輸訊息,首先他們必須同意要用甚麼方法 安全地溝通。

這樣溝通的過程就稱為 handshake,這個過程非常迅速!

handshake steps​

  1. Client Hello

    用戶端的瀏覽器寄送一清單的SSL/TLS版本和加密演算法(在他自己電腦可運行的)

  2. Server Hello

    Server依照他的偏好順序選擇用戶端寄來的清單中SSL/TLS版本及演算法。

    回傳自己的身分證書,裡面包含了自己的公鑰,讓用戶端可以驗證server的身分。

  3. Client Key Exchange

    用戶確認server的證書合法性,用戶產生一 pre-master key,使得等等雙方產生unique key時可以使用。將pre-master key用server的公鑰加密後回傳給他。

  4. Change Cipher spec

    Server用自己的私鑰解開pre-master key。到目前為止這些溝通都是公開的,還沒加密任何訊息,因為是使用公私鑰匙,所以沒人可以偷走pre-master key。現在他們都擁有了共同的pre-master key,所以就可以用對稱加密的方式。

    用戶會試著以剛才的pre-master key加密訊息傳送給server。

    若成功,Server會回傳訊息,讓雙方確認這把鑰匙是可行的!

  5. Everything is now secured

    之後,兩者間的訊息往來都會被加密了!

SSL & TSL​

上面提到handshake會需要SSL/TSL,這兩者都是關於網路傳輸安全的協定。

SSL是TSL的前身。

SSL = Secure Sockets Layer是Netscape訂定的協議,非常久遠,第一版V1甚至沒有釋出,而V2是在1995年,後來V2有許多安全性問題,因此推出V3一切都很美好直到1999年,網路大戰掀起(主要是Netscape和Microsoft),Netscape將SSL協定控制權轉交給IETF(管理網路標準的開放組織),在1999年底,IETF釋出TLS V1(其實就是SSL V3.1),直到現在TLS和SSL都還是讓人很confused。

之後TLS一直有釋出新版本,但直到2013年瀏覽器才開始跟上並支持V1.2,(more confusion : SSL3.0在2015被正式退役)。2018年推出TLS V1.3大幅提升安全性,也是目前多數瀏覽器所支持的。

Certificate Authorites(CA)​

上面提到要安全連線,代表server一定要有身分證書(certificate),究竟要如何獲取呢?

Certificate Authority(CA)是第三方機構,主要有三個功能

  1. 發證書
  2. 確認證書擁有者的身分
  3. 提供證明證書的合法有效性

較有名的機構有Comodo, DigiCert, GoDaddy等等,要成為CA需要符合嚴謹的安全性要求,且經過重重審核並有能力確保安全性。必須要被接受加入root store,root store基本上是儲存被信任的CA的資料庫。Apple, Windows, Mozilla等在你的電腦或裝置中運行他們預先安裝的自己的root stores

憑證類型​

  1. Domain validated

    僅驗證domain name,沒其他的了,一般人可能需要這個!

  2. Organization validated

    除了驗證憑證外,會需要手動驗證憑證背後的組織。

  3. Extended Validated

    會需要相當繁雜的驗證,主要用在商業用途。

所有有效憑證都會使得瀏覽器網址列有合法的鎖的符號,而若是最後一項EV則會有公司的名稱。

發憑證(sign certificate)​

當CA要發憑證時,簽署他們透過他們預先註冊於root store的root certificate,多數時候,憑證是由root cerificate間接簽署的intermedia certificate,若發生安全性問題,很容易撤銷憑證,因為這些root certificate是被安裝在美台裝置上的。

如何驗證憑證有效性​

稱為 chain of trust

  1. 瀏覽器透過HTTPS連線並下載憑證

  2. 檢查憑證並非root certificate

  3. 瀏覽器下載另一憑證,此憑證就是intemedia certificate,用來簽署該上一個憑證的

  4. 檢查並非root certificate

  5. 再去檢查簽署此intemidat certificate的憑證

    • Yeahh是root certificate,那麼剛剛那些憑證都會被視為是有效的
    • Noooo,不是root certificate,那麼全部都不能信任了