knightwatch 2020-03-05
什么是HTTP和HTTPS?
HTTP是浏览器与服务器之间以明文的方式传送内容的一种互联网通信协议。
HTTPS是在HTTP的基础上主要基于SPDF协议结合SSL/TLS加密协议,客户端依靠证书验证服务器身份传递加密信息的通信协议。
1991年 HTTP/0.9 仅支持GET请求,不支持请求头
1996年 HTTP/1.0 默认短连接(一次请求建议一次TCP连接,请求完就断开),支持GET、POST、 HEAD请求
1999年 HTTP/1.1 默认长连接(一次TCP连接可以多次请求);支持PUT、DELETE、PATCH等六种请求
增加host头,支持虚拟主机;支持断点续传功能
2015年 HTTP/2.0 多路复用,降低开销(一次TCP连接可以处理多个请求);
服务器主动推送(相关资源一个请求全部推送);
解析基于二进制,解析错误少,更高效(HTTP/1.X解析基于文本);
报头压缩,降低开销。
HTTPS请求过程:(一次HTTPS请求要进行两次HTTP传输)
1.客户端发出https请求,请求服务端建立SSL连接;
2.服务端收到https请求,申请或自制数字证书,得到公钥和服务端私钥,并将公钥发送给客户端;
3.客户端验证公钥,不通过验证则发出警告,通过验证则产生一个随机的客户端私钥;
4.客户端将公钥与客户端私钥进行对称加密后传给服务端;
5.服务端收到加密内容后,通过服务端私钥进行非对称解密,得到客户端私钥;
6.服务端将客户端私钥和内容进行对称加密,并将加密内容发送给客户端;
7.客户端收到加密内容后,通过客户端私钥进行对称解密,得到内容。
HTTPS怎么校验证书的有效性?
证书里面包含了公钥+各种信息+签名,公钥加密私钥解,私钥加密公钥解,通过私钥将签名解密后得到的信息和证书里面的信息比对就可以验证证书的合法性了。
签名是私钥和各种信息加密后形成的签名。
为什么HTTPS很安全却不普及?
1.加密通信与普通的文本通信,要消耗更多的CPU和内存,缓存慢,通信成本较大;
2.HTTPS通信需要证书,而证书不是免费的。