HTTP权威指南学习笔记——HTTPS

HTTPS概述

HTTPS的主要原理是,它在将HTTP报文发送给TCP之前,先发给一个安全层,对报文进行加密处理。现在HTTP的安全层是通过SSL和TLS来实现的,一般都统称为SSL。

HTTPS为什么会出现

就是因为HTTP存在着以下这些问题:
1、被监听,因为HTTP传输的数据是明文,如果中途被劫持了,类似于密码之类的信息就不安全;对此HTTPS对数据进行加密处理

2、被伪装,客户端请求到的数据并一定来源于合法的地址;对此HTTPS采用了数字证书

3、被篡改,HTTP在传输过程中,数据可以随时被改动;对此HTTPS对数据进行摘要,可以感知数据变动

正是出于这些不安全因素,HTTPS应运而生

HTTPS方案

一般通过URL来告知Web服务器执行HTTP安全协议版本,也就是URL方案的前缀为http或https

如果URL走的是HTTPS,客户端会开启443默认端口来连接服务器,进行握手过程,同服务器交换SSL安全参数,附上加密的HTTP命令

安全传输建立流程

客户端发送一个HTTPS方案的请求之后,客户端会通过443端口与服务器建立连接,TCP连接建立以后,客户端和服务器会初始化SSL层,沟通加密参数,并交换密钥,握手完成后,SSL初始化完成,客户端发送请求报文给安全层。

如何保障安全

对称加密、非对称加密、数字证书

加密的HTTPS事务流程

  • 建立到服务器443端口的TCP连接
  • 双方进行SSL安全参数握手
  • 在SSL发送HTTP请求,在TCP发送已经加密的请求
  • 在SSL发送HTTP响应,在TCP发送已经加密的响应
  • SSL关闭通知
  • TCP关闭连接

SSL安全参数握手流程

  • 客户端向服务器发送可供选择的密码,并请求证书
  • 服务器发送选中密码和证书
  • 客户端发送保密信息,双方生成密钥
  • 双方互相告知,开始加密过程

站点证书的有效性校验

  • 日期检测
  • 签名颁发者可信度检测
  • 签名检测
  • 站点身份检测

SSL握手简化版流程

客户端发送HTTPS请求给服务器端

服务器端选择合适的加密协议后,返回数字证书及公钥

客户端验证数字证书是否合格,如果不合格则提示证书有问题;如果合格;则随机生成对称密钥,使用数字证书上的公钥对其进行加密,发送给服务器端

服务器端使用私钥对证书进行解密,得到客户端的对称密钥,对要返回的内容用对称私钥加密,发送给客户端

客户端通过对称私钥解密,得到数据,握手结束