HTTP
HTTP ( 全称为 " 超文本传输协议",英文Hyper Text Transfer Protocol ) 是一种应用非常广泛的 应用层协议.超文本的解释:所谓超文本指的是传输的内容不止是文本内容(html,css),还可能是一些其它资源,如音频,图片,视频等。
常见的应用场景:
浏览器和服务器之间通信
手机与服务器之间通信
多个服务器之间进行调用(请求转发)
什么是HTTPS
HTTPS(Hyper Text Transfer Protocol Secure,安全的超文本传输协议)是一种基于 SSL/TLS 协议的 HTTP 协议,它是 HTTP 协议的安全版本。HTTPS 协议通过加密通信内容和身份验证来保证数据传输的安全性和完整性,从而可以有效地防止数据在传输过程中被窃取或篡改。HTTP的默认端口号为80,HTTPS的默认端口号为443
HTTPS = HTTP + 加密 + 认证 + 完整性保护。
HTTP 与 HTTPS 有哪些区别?
HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443。
HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
HTTP 由于是明文传输,所以安全上存在以下三个风险
窃听风险,比如通信链路上可以获取通信内容,用户号容易没。
篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。
冒充风险,比如冒充淘宝网站,用户钱容易没。HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS 协议,可以很好的解决了上述的风险。
信息加密:交互信息无法被窃取,但你的号会因为「自身忘记」账号而没。
校验机制:无法篡改通信内容,篡改了就不能正常显示,但百度「竞价排名」依然可以搜索垃圾广告。
身份证书:证明淘宝是真的淘宝网,但你的钱还是会因为「剁手」而没。
可见,只要自身不做「恶」,SSL/TLS 协议是能保证通信是安全的。HTTPS 是如何解决上面的三个风险的?
- 混合加密的方式实现信息的机密性,解决了窃听的风险。
- 摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决了篡改的风险。
- 将服务器公钥放入到数字证书中,解决了冒充的风险。
报文格式
请求方法+(请求访问的资源对象)URL+HTTP协议版本
GET /index.htm HTTP/1.1
请求方法(告知服务器意图的HTTP方法)
GET:请求访问已被URL识别的资源,获取响应的内容
POST:发送实体的主体
PUT:传输文件
DELETE:删除文件,与PUT相反
状态码(从服务器返回的请求结果)
200成功状态码
请求正常处理完
3XX重定向状态码
重定向
请求的资源已经移到了不同的位置,需要采取不同的操作来访问。目的地址无法到达,更换目的地址重新传输
301永久重定向
请求的资源已被分配新的URL,以后使用资源新的URL。当网站的URL发生改变后,而客户端依然访问先前的URL,这时浏览器会弹出301并携带新的URL,提示用户点击新的URL,并将新的URL与旧的URL做一个映射关系,用户以后访问旧的URL但是浏览器会自动访问新的URL(不经过后端,直接由浏览器处理)。
302临时重定向
请求的资源已被分配新的URL,本次使用资源新的URL,旧的URL还在,临时从旧URL跳转到新URL(服务端发布的通行证有 一点的时限,过了这个时限跳转到新的URL)
eg当客户端的信息处在不安全状态一定时间后,为保证信息的安全性,终止本次URL的访问,客户端回到之前的安全状态。
Cookie:
Cookie是客户端暂存信息的技术。Cookie会根据从服务器端的响应报文内Set-Cookie(“通行证”)的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出。
Session:
Session是服务端暂存信息的技术。客户端访问服务器的时候,服务器会把客户端的信息记录在服务器这就是session,当客户端下次再访问服务器时,直接从seesion中查找客户的状态。
Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
4XX客户端错误状态码
服务器上无法找到、处理请求的资源;
400:请求报文中存在语法错误;
401:发送的请求需要有认证信息(BASIC认证、DIGEST认证),如果之前已进行过一次请求,则表示用户认证失败;
404:服务器上没有请求的资源;
5XX服务器错误状态码
服务器处理请求出错;
HTTPS
对称密钥
加密与解密用同一个密钥,加密时必须将密钥也发送给对方,密钥由一方产生,交给另一方即可,这就导致密钥很可能会落入攻击者手里,加密无意义。
非对称密钥
安全性高,但是消耗资源大,公钥与私钥不同的算法。发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。发送方产生公钥,接收方私钥解密。公钥和私钥一起产生,公钥可以公开,但是私钥由接受者安全保管。
发送方(加密者)使用接收方的公钥来加密消息,产生密文。
接收方(解密者)使用自己的私钥来解密接收到的密文,得到原始的消息。
HTTPS的加密方式
非对称加密方式的安全性高,但是加密速度慢,对称加密的安全性低但是加密速度快,则应充分利用两者的优势来通信。HTTPS采用混合加密方式:在密钥协商(交换密钥)阶段采用非对称加密,在数据传输(通信)阶段采用对称加密,以此屏蔽非对称密钥的性能损耗和对称密钥的泄露密钥问题。
服务端生成公钥与私钥,用非对称的的方式传输公钥让服务端拿到对称密钥,之后用对称密钥加密数据。
公开(非对称)密钥加密方式依然存在问题,无法证明密钥本身是预想服务器发行的引入数字证书进行身份识别,或许在传输过程中被替换或篡改引入数字签名。
通过哈希算法来保证消息的完整性;
通过数字签名来保证消息来源的可靠性(能确认消息是由持有私钥的一方发送);
通过数字证书的方式保证服务器公钥的身份,解决冒充风险。
数字签名
是只有信息的发送者才能产生的别人无法伪造的一段字符串;将原内容做hash处理后,私钥加密哈希值得到数字签名,也就是说数字签名是私钥加密的hash值, 之后将原内容和数字签名一同发出,将原内容进行哈希运算得到hashB,将数字签名用公钥解密得到hashA,通过比较hashA与hashB,若相等,说明传输的内容未被篡改过。
数字证书的工作流程(身份认证)
由CA机构(可信赖的第三方机构)产生的包含公钥、身份信息以及数字签名(一系列hash得到的加密字符串)值的一个文件。
服务端将域名、公钥、信息等发送给CA证书认证机构,CA将信息做hash运算得到一串字符串,CA用自己的私钥加密这段字符串(产生数字签名),得到签名;
之后CA将明文信息和签名一起发给服务端,服务端将证书发给客户端(浏览器),浏览器通过内置的权威机构的公钥解密签名,如果可以解开签名,则说明服务端的合法性(是权威机构认证的),解开后的签名(是CA中原文的hash值)若与 客户端用同样的hash算法计算原信息的值 做对比,若两个hash值相等,则说明信息在传输过程未被篡改,完成对证书中签名和明文信息的验证,证书验证成功。