http与https的不得不说的那些事
目录
HTTP协议格式
HTTP中常见的请求报头
HTTP请求
HTTP响应
HTTP的方法
HTTP的状态码
cookie和session
cookie
http协议是无状态的,即不会保存用户的用户名和密码,那么我们是不是每次访问同一个服务器都要重新登录一次呢?是不是访问同一服务器里的不同页面也要重新登录呢?
答:不需要。当客服端第一次登陆时,会向服务器上传用户名和密码。服务器拿到用户名和密码时,会和已经注册了的用户进行比对,比对成功,你就登录成功了,server会给你响应。server会将你的用户名和密码写到set-cookie中,并将set-cookie返回到你的客户端浏览器里的cookie中,只要浏览没有关闭,你下次再访问时server时,会自动上传cookie,server会分析你的cookie,自动进行验证,即不需要再重新登录。
cookie:
内存级cookie:浏览器不关闭,认证就一直在,可以一直访问。
硬盘级cookie:浏览器关掉了,再访问时,依旧不需要登录。
session
HTTPS的加密保护机制
HTTP VS HTTPS
SSL/TLS最大的作用就是用来加密和解密,https收到数据后,先交付给SSL/TLS,SSL/TLS对数据进行加密,将加密后的数据交给TCP.所以在网络中传送的都是加密数据,即用户数据被加密。
HTTPS的对称性加密
异或加密:
客户端端将要传输的数据 1234 与秘钥进行异或,将异或后的数据发送出去,服务器收到数据后,将收到的数据与秘钥再次进行异或,拿到原始数据。
但是:有一个很大的问题,密钥也是数据,我们怎么把密钥传给服务器,密钥要不要加密呢?这就有一个鸡生蛋和蛋生鸡的问题,所以只通过对称加密是行不通的。
非对称加密
https:秘钥协商过程,当client发送请求时,server先给client发送公钥,客户端获得公钥,用公钥将对称秘钥加密,发送给server,server收到加密后的对称秘钥后,用自己的私钥进行解密拿到对称秘钥。之后,双方通信采用对称秘钥进行通信。
为什么最终非要用对称秘钥来通信加密呢?
非对称加密算法比较复杂,故效率低,而对称加密,效率高,速度快。
https秘钥协商过程就是由SSL/TLS完成的。
黑客攻击
黑客可以入侵客户端,将自己的公钥替换server提供的公钥,然后对对称秘钥进行加密,再发送给自己的服务器,用自己的私钥解密,拿到client的对称秘钥,再神不知鬼不觉的用server提供的公钥将对称秘钥加密发给server。这样黑客就可以拿到client与server通信数据了。并且拥有对称秘钥,将通信数据解密。
防止黑客入侵
为防止黑客入侵,就要解决两个问题:
1、解决中间信息被篡改问题
2、解决远端服务器身份认证问题
防止中间信息被篡改
中间信息被篡改问题:数据摘要+数据签名
可以对原始文本进行hash算法,得到定长的短字符,定长字符序列称为摘要,然后对摘要进行加密(用server的公钥加密),形成数据签名,server拿到数据签名后,用私钥解密,拿到client传来的摘要,对数据进行hash算法,拿到短序列,与刚解密的摘要对比,如果有所不同,就说明信息被篡改过,相同就说明没被篡改。
远端服务器身份认证问题
如何识别远端服务器身份的认证问题:
公正会给合法服务器颁发证书:证书含有,公钥和权威信息
client在通信之前,向server发起请求时,先向服务器要证书,证书里包含了服务器的公钥和一些权威信息,这些信息都是加密的。client可以在任何时候对访问的服务器进行证书认证,拿到服务器的证书和自己内置的证书对比,能吻合就OK,否则就不是。
证书里的权威信息都是被公正的私钥加密的,权威信息是一种摘要信息,ca私钥加密成指纹。
client里内置了证书信息,client有公正的公钥,可以对证书里的权威信息解密,与server的证书信息做对比。
总结
client与server通信时,摘要的加密,用的是server的公钥加密的,只有server的私钥才能解密。
出于安全性考量,https通信采用的是非对称加密,但是出于效率的考量,数据传输使用对称加密。
https与http的区别:
https加了一些加密环节,https一定会比htttp慢一些,https在发起请求时,不是直接发送数据,还要有一个双方协商过程,客户端发起请求,服务器立马把证书给客服端。