超文本傳輸安全協議

超文本傳輸安全協定（HyperText Transfer Protocol Secure，縮寫：HTTPS；常稱為HTTP over TLS、HTTP over SSL或HTTP Secure）是一種透過電腦網路進行安全通訊的傳輸協議。HTTPS經由HTTP進行通訊，利用TLS加密封包。

HTTPS的主要目的是提供對網站伺服器的身份認證，以保護交換資料的隱私與完整性。這個協議由網景公司（Netscape）在1994年首次提出，隨後擴展到網際網路上。

歷史上，HTTPS連接經常用於全球資訊網上的交易支付和企業資訊系統中敏感資訊的傳輸。在2000年代末至2010年代初，HTTPS開始廣泛使用，以確保各類型網頁是真實的，保護帳戶和保持使用者通信、身份和網路瀏覽的私密性。

## 主要作用

<image>

HTTPS的主要作用是在不安全的網路上創建一個安全信道，並可在使用適當的加密套件和伺服器證書可被驗證且可被信任時，對竊聽和中間人攻擊提供合理的防護。

HTTPS的信任基於預先安裝在作業系統中的證書頒發機構（CA）。因此，與一個網站之間的HTTPS連線僅在這些情況下可被信任：

- 瀏覽器正確地實現了HTTPS且作業系統中安裝了正確且受信任的證書頒發機構。
- 證書頒發機構僅信任合法的網站。
- 被訪問的網站提供了一個有效的證書，也就是說它是一個由作業系統信任的證書頒發機構簽發的（大部分瀏覽器會對無效的證書發出警告）。
- 該證書正確地驗證了被訪問的網站（例如，訪問`https://example.com`時收到了簽發給`example.com`而不是其它域名的證書）。
- 此協議的加密層（SSL/TLS）能夠有效地提供認證和高強度的加密。

不應將HTTPS和在RFC 2660中定義的安全超文本傳輸協議（S-HTTP）相混淆。

### 統計

截至2018年6月，Alexa排名前100萬的網站中有34.6%使用HTTPS作為預設值，網際網路141387個最受歡迎網站的43.1%具有安全實施的HTTPS，以及45%的頁面載入（透過Firefox紀錄）使用HTTPS。2017年3月，中國註冊域名總數的0.11％使用HTTPS。

根據Mozilla統計，自2017年1月以來，超過一半的網站流量被加密。

根據Netmarketshare發佈的資料顯示，截至2019年10月全球使用HTTPS的流量的比例已經超過了九成。而中國估計有約60%的網站使用HTTPS。

### 瀏覽器實現

當連接到一個提供無效證書的網站時，較舊的瀏覽器會使用一個對話框詢問使用者是否繼續，而較新的瀏覽器會在整個窗口中顯示警告。

Google Chrome、Internet Explorer和Firefox等瀏覽器在網站含有由加密和未加密內容組成的混合內容時，會發出警告。

自2018年起，Firefox及Chromium（以及Google Chrome、Microsoft Edge）調整了其顯示網站域名及其安全程度的方式，包括不再突出顯示HTTPS協議下的網頁及將非HTTPS協議下的網頁標註為不安全。電子前哨基金會曾經建議「在理想的世界中，任何網路請求都能默認為HTTPS的。」該基金會也曾製作了Firefox擴展組件來推廣這一建議。在Chrome瀏覽器上也有類似的擴充功能。

下圖是以Firefox瀏覽器為例，使用HTTPS時可能出現的幾種效果：

## 技術細節

### 與HTTP的差異

HTTP的URL是由「`http://`」起始與默認使用埠80，而HTTPS的URL則是由「`https://`」起始與默認使用埠443。

<image>

HTTP不是安全的，而且攻擊者可以通過監聽和中間人攻擊等手段，獲取網站帳戶和敏感資訊等。HTTPS的設計可以防止前述攻擊，在正確配置時是安全的。

### 協議層

HTTP協議和安全協議同屬於應用層（OSI模型的最高層），具體來講，安全協議工作在HTTP之下，傳輸層之上：安全協議向運行HTTP的進程提供一個類似於TCP的套接字，供進程向其中注入報文，安全協議將報文加密並注入運輸層套接字；或是從運輸層獲取加密報文，解密後交給對應的進程。嚴格地講，HTTPS並不是一個單獨的協議，而是對工作在一加密連接（TLS或SSL）上的常規HTTP協議的稱呼。

HTTPS報文中的任何東西都被加密，包括所有報頭和荷載。除了可能的選擇密文攻擊（參見局限小節）之外，一個攻擊者所能知道的只有在兩者之間有一連接這一事實。

### 伺服器設置

要使一網路伺服器準備好接受HTTPS連接，管理員必須創建一數字證書，並交由證書頒發機構簽名以使瀏覽器接受。證書頒發機構會驗證數字證書持有人和其聲明的為同一人。瀏覽器通常都預裝了證書頒發機構的證書，所以他們可以驗證該簽名。

#### 獲得證書

由證書頒發機構簽發的證書有免費的，也有每年收費數美元到數千美元不等的。

一個組織也可能有自己的證書頒發機構，尤其是當設置瀏覽器來訪問他們自己的網站時（如，運行在公司或學校區域網內的網站）。他們可以容易地將自己的證書加入瀏覽器中。

#### 作為訪問控制

HTTPS也可被用作客戶端認證手段來將一些資訊限制給合法的使用者。要做到這樣，管理員通常會給每個使用者創建證書（通常包含了使用者的名字和電子郵件地址）。這個證書會被放置在瀏覽器中，並在每次連接到伺服器時由伺服器檢查。

#### 當私鑰失密時

證書可在其過期前被吊銷，通常情況是該證書的私鑰已經失密。較新的瀏覽器如Google Chrome、Firefox、Opera和運行在Windows Vista上的Internet Explorer都實現了在線證書狀態協議（OCSP）以排除這種情形：瀏覽器將網站提供的證書的序列號通過OCSP發送給證書頒發機構，後者會告訴瀏覽器證書是否還是有效的。

### 局限

TLS有兩種策略：簡單策略和交互策略。交互策略更為安全，但需要使用者在他們的瀏覽器中安裝個人的證書來進行認證。

不管使用了哪種策略，協議所能提供的保護總強烈地依賴於瀏覽器的實現和伺服器軟體所支持的加密演算法。

HTTPS並不能防止站點被網路蜘蛛抓取。在某些情形中，被加密資源的URL可僅通過截獲請求和響應的大小推得，這就可使攻擊者同時知道明文（公開的靜態內容）和密文（被加密過的明文），從而使選擇密文攻擊成為可能。

因為TLS在HTTP之下工作，對上層協議一無所知，所以TLS伺服器只能為一個IP位址/埠組合提供一個證書。這就意味著在大部分情況下，使用HTTPS的同時支持基於名字的虛擬主機是不很現實的。一種叫伺服器名稱指示（SNI）的方案通過在加密連接創建前向伺服器發送主機名解決了這一問題。Firefox 2、Opera 8和運行在Windows Vista的Internet Explorer 7都加入了對SNI的支持。

在TLS版本1.2中，服務端發送的證書以明文傳輸，因此中國大陸的防火長城可以對特定網站按照匹配的黑名單證書，檢測到特定證書即執行TCP重置攻擊，從而導致TLS連接無法建立。這也是一種網際網路資訊審查和屏蔽的技術手段。TLS版本1.3中服務端證書被加密，然而伺服器名稱指示仍未被加密，並成為防火長城檢測的新手段。

如果Mac OS X中的家長控制被啟用，那麼HTTPS站點必須顯式地在「總是允許」列表中列出。

## 歷史

網景在1994年創建了HTTPS，並應用在網景導航者瀏覽器中。

最初，HTTPS是與SSL一起使用的；在SSL逐漸演變到TLS時，HTTPS也由在2000年五月公布的RFC 2818正式確定下來。

## 外部連結

- RFC 2818：HTTP Over TLS
- SSL 3.0規範 （IETF）