HTTPS

HTTPS 端口号为443(HTTP为80)。在 HHTP 的基础上,通过下层协议TLS提供了加密、完整性保护、认证等功能。

HTTP 存在哪些问题

  1. HTTP 不加密,信息容易被监听

  2. HTTP 缺乏完整性校验,数据才传输过程中可能被窃听者修改

  3. HTTP 缺乏身份认证机制,会导致中间人攻击

  4. 为解决问题1,HTTPS 使用对称加密与非对称加密的混合加密机制。

  5. 为解决问题2,HTTPS 使用摘要算法,客户端通过摘要算法对明文进行加密,将明文与加密后的值一起发给服务端。服务端使用相同的加密算法加密报文,将两个加密的值进行比对,来判断报文是否具有完整性。

  6. 为解决问题3,为了保证公钥没有被修改,可以使用数字证书认证机构颁发的公开密钥认证证书,即 CA 认证,只要证书可信,则公钥可信。

HTTPS 流程

  1. 客户端请求 HTTPS 网址,然后连接到 server 的 443 端口 (HTTPS 默认端口,类似于 HTTP 的80端口)。
  2. 采用 HTTPS 协议的服务器必须要有一套数字 CA(Certification Authority)证书,证书是需要申请的,并由专门的数字证书认证机构(CA)通过非常严格的审核之后颁发的电子证书。颁发证书的同时会产生一个私钥和公钥。私钥由服务端自己保存,不可泄漏。公钥则是附带在证书的信息中,可以公开的。证书本身也附带一个证书电子签名,这个签名用来验证证书的完整性和真实性,可以防止证书被篡改。
  3. 服务器响应客户端请求,将证书传递给客户端,证书包含公钥和大量其他信息,比如证书颁发机构信息,公司信息和证书有效期等。Chrome 浏览器点击地址栏的锁标志再点击证书就可以看到证书详细信息。
  4. 客户端解析证书并对其进行验证。如果证书不是可信机构颁布,或者证书中的域名与实际域名不一致,或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。如果证书没有问题,客户端就会从服务器证书中取出服务器的公钥 A。然后客户端还会生成一个随机码 KEY,并使用公钥A将其加密。
  5. 客户端把加密后的随机码 KEY 发送给服务器,作为后面对称加密的密钥。
  6. 服务器在收到随机码 KEY 之后会使用私钥B将其解密。经过以上这些步骤,客户端和服务器终于建立了安全连接,解决了对称加密的密钥泄露问题。
  7. 服务器使用密钥 (随机码 KEY)对数据进行对称加密并发送给客户端,客户端使用相同的密钥 (随机码 KEY)解密数据。
  8. 双方使用对称加密愉快地传输所有数据。