1. 程式人生 > >介面測試之深入理解HTTPS

介面測試之深入理解HTTPS

前言

隨著網路安全問題越來越被重視,HTTPS協議的使用已經逐漸主流化。目前的主流站點均已使用了HTTPS協議;比如:百度、淘寶、京東等一二線主站都已經遷移到HTTPS服務之上。而作為測試人員來講,也要需時俱進對HTTPS協議要有一定的瞭解,這樣就可以更好的幫助我們在工作完成任務和排查問題。

HTTP與TCP

首先,在理解HTTPS之前需要了解HTTP。HTTP(Hyper Text Transfer Protocol)是超文字傳輸協議,是在網際網路上廣泛使用的一種資訊傳輸方式,通常瀏覽器與伺服器進行通訊使用的都是HTTP協議。該協議因為其使用簡單、方便,隨著網際網路的發展也同時在壯大。而HTTP協議本身只是定義了一份規範,具體的傳輸能力則是由TCP協議來完成。所以HTTP是基於TCP之上,廣泛應用與瀏覽器中的一種傳輸協議。

HTTP與HTTPS

因為有了HTTP協議,所以網際網路的發展如虎添翼,在短短几十年時間內,改變了人類很多的生活方式甚至生存方式。至今HTTP本身仍然是可以支援網際網路的通訊,只是其在安全上不能提供很好的保障。尤其是網際網路與人們的生活越來越密切的時候,網際網路的安全問題也越來越重要。而HTTPS則是解決這個問題的方法。本質上HTTPS=HTTP+SSL/TLS。其中SSL和TLS是一種加密協議,即HTTPS是一種帶加密功能的HTTP協議。

HTTPS、HTTP、TCP之間的關係

即HTTPS並不是一個新的協議,而是多個協議組裝後的產物。而其安全性則主要由SSL/TLS層來保障。(當然SSL/TLS也可以可以保障其它的應用層協議,比如:SSL+FTP=SFTP)

SSL/TLS的安全機制原理

既然SSL可以保障安全,那麼它到底是如何保障的呢?其實SSL安全機制是通過對HTTP協議內容進行加密來實現的。而加密方式一般有2種類型:對稱加密和非對稱加密。

對稱加密:加密和解密時使用的密匙(key)是一樣的。密匙安全性不高,加密速度快

非對稱加密:加密時使用公匙加密,解密時使用私匙解密。密匙安全性高,加密速度相對慢

而SSL中兩者都有使用,且分別結合了它們的優缺點。在每次通訊前先使用非對稱加密來確定本次通訊後續使用的對稱加密的密匙,之後所有的通訊都是使用臨時生成的密匙來進行對稱加密後傳輸。

但是從安全形度考慮這還不夠,因為密匙還是有可能被人竊取了,然後篡改內容。所以就引入了證書機制,相當於給加密內容在加一個蓋章。接著問題就變成了有人偽造證書怎麼辦?再然後就有了第三方認證機構,專門來發證書的,只有這些機構發的證書才可以信任。

於是現在訪問HTTPS網站的時候就可能有兩種情況,一種是使用認證的證書、一種是使用未認證的證書。當我們訪問的網站使用未認證的證書時,瀏覽器往往就會有提醒--該網站不可信任。如果要一意孤行,就需要自己手動點繼續。(當然你還可以給瀏覽器設定忽略安全認證)

證書發放與安裝

全世界範圍內可以發放安全證書的第三方機構就2-3個,而全世界有那麼多的公司或網站需要申請證書。如何知道某個證書是否可信任呢?

其實安全證書有分根證書、子證書、子子證書,不同等級的信任範圍。通常根證書是由最上面的第三方機構頒發給自己的,根證書下面的一級子證書通常是頒發給其下的代理公司的,而如果你的網站是從代理公司申請的,那麼你證書將會是一個二級子證書。

而在認證證書的時候, 作業系統或者程式會去檢查該證書此前是否已經被信任過,或者該證書的上級證書(父級、父父級等等)是否被信任過。只要有一個等級的證書被信任過,則認為該證書是可信任的。

具體證書是否可信任是根據系統或者程式是否已安裝並信任了該證書。通常作業系統都會預裝頂級證書機構的根證書,所以只要你訪問的網站證書是從這幾個頂級第三方機構或其代理申請的,那麼就會被直接信任無需你去手動下載和安裝。

HTTPS代理

瞭解了HTTPS和證書的基本知識之後,再來看看HTTPS的代理是如何實現的。與HTTP代理相比,HTTPS代理會多一個證書管理的功能,因為它要給瀏覽器端下發證書,才能模擬正常的HTTPS連線。所以HTTPS代理在進行內容轉發之前,還需要對內容進行解碼和加密的轉換。具體圖解如下:

 

這就是為什麼使用Charles、Fiddler之類的軟體代理HTTPS的時候,需要先安裝一個它們的證書(尤其是移動端)。因為它們的證書是沒有認證過的,需要手動安裝並信任,之後才可以正常的代理。