文章

HTTPS

什么是https

超文本传输安全协议(英语:HyperText Transfer Protocol Secure,缩写:HTTPS;常称为HTTP over TLS、HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。1

什么是ssl/tls

传输层安全性协议(英语:Transport Layer Security,缩写:TLS)及其前身安全套接层(英语:Secure Sockets Layer,缩写:SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。2

http的风险

(1) 窃听风险(eavesdropping):第三方可以获知通信内容。

(2) 篡改风险(tampering):第三方可以修改通信内容。

(3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。

TLS四次握手 345

  1. Client Hello

    在这个阶段,客户端需要把这些东西发送给服务器:

    • 支持的协议版本,比如TLS 1.0版。

    • 一个客户端生成的随机数,稍后用于生成”对话密钥”。

    • 支持的加密方法,比如RSA公钥加密。

    • 支持的压缩方法。
    • Session ID,如果是之前断开的会话,会带上Session ID用来恢复会话。
  2. Server Hello

    服务器响应客户端的请求,如果上一步带上了Session ID,则直接恢复会话,否则带上以下信息给客户端:

    • 选择SSL/TLS协议版本号
    • 选择加密方式
    • 一个服务器生成的随机数
    • 服务器证书

    在第三步之前,都是明文通信。

  3. Client Key Exchange

    客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。

    如果证书没有问题,客户端就会从证书中取出服务器的公钥。然后,向服务器发送下面三项信息。

    • 一个随机数(pre-master key)。该随机数用服务器公钥加密,防止被窃听。
    • 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
    • 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。
  4. Server Finish

    • 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
    • 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。

https怎么保证安全性

在服务器返回证书这一步中,中间人可以劫持服务器的公钥,并自己生成非对称加密的秘钥对,伪装成服务器,并把自己生成的公钥下发给客户端,然后中间人再和服务器通信。这就是著名的中间人攻击。

为此,HTTPS协议引入了CA数字证书的概念。6

数字证书

包含签发机构、有效期、申请人公钥、证书所有者、证书签名算法、证书指纹以及指纹算法等信息。

CA

数字证书签发机构,权威CA是受操作系统信任的,安装操作系统就会内置。

浏览器是如何验证网站的有效性的呢?

  1. 浏览器以HTTPS协议请求服务器的443端口
  2. 服务器下发自己的数字证书给浏览器(明文)
  3. 浏览器先校验CA、有效期、域名是否有效,如果无效,则终止连接(服务器此时不可信任)
  4. 如果有效,则从操作系统取出证书颁发机构的公钥,根据签名算法数字签名解密得到证书指纹指纹算法
  5. 浏览器用解密得到的指纹算法计算证书的指纹,与解密得到的指纹进行比对,如果一致,证书有效,公钥也安全拿到了
  6. 浏览器此时已经和真实的服务器进行通信了,中间人无法得知通信内容,因为中间人没有网站私钥
本文由作者按照 CC BY 4.0 进行授权