目录
HTTP响应中的一些信息
HTTPS
HTTP响应中的一些信息
状态码:描述了这次HTTP请求是否成功,以及失败的原因。
1)200 ---OK
表示这次访问成功了。
2)404 ---Not Found
表示客户端请求的资源在服务器这边不存在。
3)403 ---Forbidden
表示客户端的权限不足,被禁止访问了。
4)405 ---Method Not Allowed
表示请求中的方法,服务器不支持。当请求方发送请求(GET/POST方法),服务器的代码逻辑就需要处理上述请求,假如服务器没有实现对应的逻辑。比如只实现了处理GET,没实现处理POST,此时你发送POST,就可能得到405。
5)500 ---Internal Server Error
表示服务器内部错误。代码里出现bug。
6)504 ---Gateway Timeout
表示服务器访问超时了。这种问题常出现于“服务器比较繁忙的情况”。
7)302 ---Move temporarily
临时重定向。访问某个地址的时候,访问的是旧地址,自动跳转到新的地址上。
响应报文报头(header)中包含Location,表示接下来要跳转到哪个地址上。
8)301 ---Moved Permanently
访问的旧地址和新地址之间的映射关系,固定了。此时浏览器就会缓存这样的结果。后续再次访问旧地址的时候,浏览器旧可以直接构造新地址的请求,就减少一次http访问了。
如果使用302作为重定向,临时重定向,旧地址是否要重定向,以及重定向到哪里,就是可变的。因此每次访问旧地址,都需要使用旧地址访问服务器,获取到响应的Location属性再进行跳转。
HTTPS
HTTPS本质上就是HTTP的基础上增加了一个加密层。 S =>SSL(安全相关的协议)
HTTPS = HTTP + SSL
明文:要传输的真正的意思是啥。
密文:加密之后得到的数据。
密钥:用来加密和解密的道具/数据。
把明文通过密钥变成密文 => 加密
把密文通过密钥变成明文 => 解密
对称加密:加密和解密,使用同一个密钥。加密解密速度比较快。
非对称加密:密钥是一对(分别称为公钥和私钥),加密解密速度比较慢,安全性更高。可以使用公钥加密,私钥解密。或者可以使用私钥加密,公钥解密。
HTTPS使用对称加密。
注:当有多个客户端的时候,不同客户端的密钥是不同的。
如何把密钥传给对方呢?如果明文传输,又会被黑客获取到。
需要给密钥进行加密。(无法使用对称加密的方式,对密钥加密)
此时就需要通过非对称加密的方式,针对对称密钥来进行加密。(非对称加密不是针对后续传输的数据内容展开的,而是只针对对称密钥来进行)
服务器生成 => 公钥 和 私钥
当客户端连上服务器的时候,服务器就会把自己的公钥,告诉给客户端(私钥还是自己来持有的)。公钥是会告诉所有的客户端(所有的客户端都是同一个公钥),私钥的话是自己留好不会告诉任何人。
接下来客户端生成密钥。(每个客户端生成自己的,客户端之间不知道别人的对称密钥是啥)
通过服务器拿到的公钥,针对对称密钥,进行加密。再把对称密钥的密文,传输给服务器。
中间人攻击问题:黑客可以冒充自己是服务器。黑客面对客户端的时候,扮演服务器的角色。面对服务器的时候,扮演客户端的角色。
如何解决中间人攻击?
最关键的切入点,就是让客户端能够区分出当前的公钥是不是服务器自己的公钥,是不是被伪造出来的公钥。
此处需引入第三方公证机构。公证机构会对公钥进行“公证”,此时客户端看到了这个公钥被公证了,就可以认为这是合法的了。公证机构,生成一对非对称密钥pub(公证),pri(公证),拿着pri(公证)针对证书数据的校验和进行加密,得到了数字签名。
服务器上线自己的网站的时候,要先去第三方公证机构申请一个“证书”。
数字签名:加密后的校验和。基于CRC/MD5等方式,把原始数据每个字节都带入,计算一遍,最终得到的一串数。数字签名就是针对这个校验和,再来一次加密,基于非对称加密的方式来进行的加密。
客户端收到证书,就会对证书的合法性进行校验。
1)针对证书这些字段,计算校验和。
2)针对数字签名进行解密
数字签名是基于公正机构的私钥来加密的。就需要拿着公证机构的公钥来解密。
注:获取公证机构的公钥,不是通过“网络”的方式获取到的。通过网络的方式,就可能会得到黑客伪造的公钥。
而是操作系统会内置公证机构的公钥。
公证机构一共没多少,一个操作系统就可以在发布的时候,把市面上的公证机构的公钥都打包放在一起。随着安装操作系统,公钥就有了。
接下来,就可以使用公证机构的公钥(系统内置),来对数字签名进行解密了。解密之后得到校验和2.
3)客户端来比较 校验和1 == 校验和2
相等就说明整个证书都是没有被篡改过的,证书中包含的公钥就是可信的服务器公钥了。
以上,关于HTTPS,希望对你有所帮助。