# HTTPS 基础

# 工作流程

HTTPS 采取的是混合加密的方式,简单来说就是通过非对称加密的方式来传输对称密钥,采用对称加密的方式来传输之后的数据。

  1. Client 发起一个 HTTPS 的请求 Client Hello (TLS 连接)到服务器,同时会告诉自己支持的加密算法
  2. Server从客户端发来的加密算法中,选出一组加密算法和HASH算法(注,HASH也属于加密),并将自己的身份信息以证书的形式发回给客户端。而证书中包含了网站的地址,加密用的公钥,以及证书的颁发机构等(这里,服务器就将自己用来加密用的公钥一同发还给客户端)
  3. Client 验证公钥证书:比如是否在有效期内,证书的用途是不是匹配 Client 请求的站点,是不是在 CRL 吊销列表里面,它的上一级证书是否有效,这是一个递归的过程,直到验证到根证书(操作系统内置的 Root 证书或者 Client 内置的 Root 证书)。如果验证通过则继续,不通过则显示警告信息。
  4. Client 使用伪随机数生成器生成加密所使用的会话密钥,然后用证书的公钥加密这个会话密钥,发给 Server
  5. Server 使用自己的私钥解密这个消息,得到会话密钥。至此,Client 和 Server 双方都持有了相同的会话密钥(对称密钥)
  6. Server 使用对称密钥加密明文内容 A,发送到 Client
  7. Client 使用对称密钥解密响应的密文,得到明文内容 A
  8. Client 再次发起 HTTPS 的请求,使用对称密钥加密请求的明文内容B,然后 Server 使用对称密钥解密密文,得到明文内容B

可以参考图:

http-08

Note: 上述的认证过程是一个单向的认证过程,仅仅验证了服务器的身份,并没有验证客户端的身份。这是因为通常单向认证通过后已经建立了安全通信,用账号、密码等简单的手段就能够确认用户的真实身份。但为了防止账号、密码被盗,有的时候(比如网上银行)还会使用 U 盾给用户颁发客户端证书,实现双向认证,这样子会更加的安全。

为什么不直接全程使用非对称加密算法进行数据传输?

这个问题的答案是因为非对称算法的效率对比起对称算法来说,要低得多得多;因此往往只用在HTTPS的握手阶段。

# HTTPS 对比 HTTP

HTTPS 比 HTTP 更加安全,对搜索引擎更友好,利于 SEO,谷歌、百度优先索引 HTTPS 网页; HTTPS 需要用到 SSL 证书,而 HTTP 不用; HTTPS 标准端口 443,HTTP 标准端口 80; HTTPS 基于传输层,HTTP 基于应用层; HTTPS 在浏览器显示绿色安全锁,HTTP 没有显示;

# HTTPS 中用到的加密算法

 对称加密算法:AES, chacha20
 非对称加密算法:RSA, ECC
 HASH算法:MD5, SHA1, SHA256,SHA384
 椭圆曲线算法: ECDHE

# 参考

  1. 深入理解 HTTPS 工作原理 (opens new window)
  2. 深入理解HTTPS协议 (opens new window)
陕ICP备20004732号-3