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请求给服务器端
服务器端选择合适的加密协议后,返回数字证书及公钥
客户端验证数字证书是否合格,如果不合格则提示证书有问题;如果合格;则随机生成对称密钥,使用数字证书上的公钥对其进行加密,发送给服务器端
服务器端使用私钥对证书进行解密,得到客户端的对称密钥,对要返回的内容用对称私钥加密,发送给客户端
客户端通过对称私钥解密,得到数据,握手结束