HTTPS

**超文本傳輸安全協定**（英語：**H**yper**T**ext **T**ransfer **P**rotocol **S**ecure，縮寫：**HTTPS**；常稱為 HTTP over TLS、HTTP over SSL 或 HTTP Secure）是一種透過計算機網路進行安全通訊的傳輸協定。HTTPS 經由 HTTP 進行通訊，但利用 SSL/TLS 來加密封包。HTTPS 開發的主要目的，是提供對網站伺服器的身分認證，保護交換資料的隱私與完整性。這個協定由網景公司（Netscape）在 1994 年首次提出，隨後擴展到網際網路上。

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

另外，還有一種安全超文本傳輸協定（S-HTTP）的 HTTP 安全傳輸實作，但是 HTTPS 的廣泛應用而成為事實上的 HTTP 安全傳輸實作，S-HTTP 並沒有得到廣泛支援。

## 主要作用

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 月以來，超過一半的網站流量被加密。

 

### 瀏覽器實作

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

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

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

## 技術細節

### 與 HTTP 的差異

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

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 正式確定下來。

## 參見

* Bullrun (解密程式)
* 電腦安全
* TLS
* Curl-loader
* 直徑協定
* HTTPsec
* 莫希・馬林斯皮克
* 機會性加密
* Stunnel

## 參考資料

## 外部連結

* RFC 2818：HTTP Over TLS （頁面存檔備份，存於網際網路檔案館）
* SSL 3.0 規範 （頁面存檔備份，存於網際網路檔案館）（IETF）