超文本传输安全协议

超文本传输安全协定（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）