HTTP有如下三个缺点:无加密,无身份认证,无完整性保护,所以所谓的HTTPS,它其实就是HTTP+加密+身份认证+完整性保护。HTTPS并非一种新的协议,在通讯接口使用了SSL和TLS协议而已。HTTP一般直接和TCP通讯,而HTTPS中HTTP先和SSL通讯,再由SSL和TCP进行通讯。模型以下算法
须要注意的是,SSL协议并非一个应用层协议,它是介于应用层和传输层协议之间的一个安全协议。浏览器
对称密钥加密
SSL采用对称密钥进行加密,所谓的对称密钥,就是加密和解密都用同一个密钥,所以也叫作共享密钥加密。缓存
可是这种方法也有一个弊端,一旦密钥被第三方得到了,就能够对数据进行解密并窃取,所以这并非一个彻底安全的方法。事实上,若是加密解密方法十分简单,是很容易被第三方截取的。安全
因此这种方法的缺陷就在于,若是一方不发送密钥,对方就没法利用密钥解密。另外,若是发送了密钥,可是密钥被第三方截取了,数据就容易被窃取。所以,须要一种方式,可以保证该密钥可以确保送到对方手中而且还不可以让第三方截取。 服务器
非对称密钥加密
SSL还采用了一种技术就是非对称密钥加密,所谓的非对称密钥,就是这是一对密钥,一个是私钥,一个是公钥。私钥不能让其余任何人知道,而公钥能够随意发布,任何人均可以得到到,所以这种加密方式也叫公开密钥加密。网络
它的原理是这样的:post
客户端向服务器发起请求,服务器建立一对非对称密钥,将公有私钥返回给可客户端,本身保留着这个私钥而不发送。
客户端收到了来自服务器的公钥,因而将本身的数据经过公钥加密,并返回给服务器
服务器接收到了客户端的数据,由于使用本身发送的公钥加密的,所以用本身的私钥对其进行解密,拿到数据
即便第三方拿到了加密后的数据,由于没有私钥,所以也没法获取到真实的数据。假如想要破解这个解密方式,是十分困难的。
HTTPS使用两种加密方式的混合加密
对称密钥加密方式的优缺点:性能
优势:处理速度快
缺点:可是容易被第三方盗取
非对称密钥加密方式的优缺点:网站
优势:更加安全,不容易被盗取
缺点:处理效率相比对称密钥加密要慢,若是在通讯时用这种方式加密,效率很低
因而HTTPS采用了二者的优势,使用了混合加密的方式编码
使用非对称密钥加密的方式安全地交换再稍后对称密钥加密中要使用的密钥
确保交换的密钥是安全的以后,放弃非对称密钥加密,使用对称密钥加密来进行通讯,保证传输效率
HTTPS使用的各类证书
证实公开密钥正确性的数字证书
客户端没法判断本身收到的服务器的公钥是不是正确的,是否在服务器发送给客户端的过程当中被第三方篡改了。
为了解决上面的问题,服务器可使用由数字证书认证机构(CA)颁发的证书,这种机构是客户端和服务器双方的第三方机构。服务器获取证书的流程以下:
服务器运营人员向CA提出公开密钥的申请
CA在判明申请者的身份以后,会对已申请的公开密钥作数字签名,而后将这个签名的公开密钥和放入公钥证书分配给服务器公司
服务器会把这个由CA颁发的公钥证书以及公开密钥发送给客户端,以此来和客户端进行通讯
接收到证书的客户端可使用公开密钥对证书上的签名进行认证,一旦认证经过,客户端就能够知道认证服务器公开密钥的是真实有效的CA,而且服务器的公开密钥是值得信赖的
CA的公开密钥已经事先植入到浏览器中,客户端经过CA的公开密钥向CA认证服务器的公钥证书上的数字签名的真实性。
证实企业真实性的EV SSL证书
该证书用来验证服务器背后运营的企业的合法性
用以确认客户端的客户端证书
该证书用来向服务器证实,与之通讯的客户单是预料以内的客户端。
想要获取证书 时,用户得自行安装客户端证书,可是客户端证书是要付费买的。
由于成本比较大,所以只有某些特定的业务,如网上银行等,就须要使用客户端证书。
HTTPS是怎么解决HTTP协议的三大缺点的?
防监听:采用对称加密对数据进行加密,采用非对称加密对对称加密的密钥进行加密
防假装:通讯双方携带证书,证书有第三方颁发,很难伪造
防篡改:采用摘要算法(MD5或是SHA-1),一样的数据由一样的摘要,而只要有一点不一样的数据,它的摘要每每不一样,只要数据作了篡改,就会被感知到。
HTTPS的通讯流程
客户端向服务器发起SSL通讯,报文中包含客户端支持的SSL的指定版本,加密组件列表(所使用的加密算法及密钥长度)
服务器的响应报文中,包含SSL版本以及加密组件,服务器的加密组件内容是从客户端发来的加密组件列表中筛选出来的,服务器还会发一个公开密钥而且带有公钥证书
客户端拿到服务器的公开密钥,并验证其公钥证书(使用浏览器中已经植入的CA公开密钥)
若是验证成功,客户端生成一个Pre-master secret随机密码串,这个随机密码串其实就是以后通讯要用的对称密钥,并用服务器的公开密钥进行加密,发送给服务器,以此通知服务器,以后的报文都会经过这个对称密钥来加密
同时,客户端用约定好的hash算法计算握手消息,而后用生成的密钥进行加密,一块儿发送给服务器
服务器收到客户端发来的的公开密钥加密的对称密钥,用本身的私钥对其解密拿到对称密钥,再用对称密钥解析握手消息,验证hash值是否与客户端发来的一致。若是一致,则通知客户端SSL握手成功
以后的数据交互都是HTTP通讯(固然通讯会得到SSL保护),且数据都是经过对称密钥来加密(这个密钥不会每次都发,在握手的过程当中,服务器已经知道了这个对称密钥,再有数据来时,服务器知道这些数据就是经过对称密钥加密的,因而就直接解密了)
一:网络协议HHTP
超文本传输协议
RFC2616
二:HTTP报文主要结构
1)Request
Method(get,post) ---请求方式
URL-------请求地址
Header------请求头
Body--------请求体
2)Response
Status Code-------状态码
Header--------响应头
Body--------响应体
三:HTTP状态码
200:成功,这个成功只是表示服务器正常处理完成了,并不能表示逻辑的正确性
301,320:跳转,通常能够在header中看到location,即跳转地址,区别是一个是临时跳转一个是固定跳转
304:未修改,服务器发现资源文件标识未变更,通知客户端读取本地缓存文件便可
400:客户端请求信息格式问题
403:通常是禁止访问,好比文件,目录等存在,但作了访问限制
404:通常为文件,目录不存在,但也能够将其余状况假装成为不存在
500:出现这个通常都是服务端的代码直接抛出异常致使
502,503,504:这个相似,在网络异常等状况下均可以出现,也有不少代码抛出错误时候出现
四:HTTP常规Header信息与做用(Request)
Host:必须存在,域名指定(相似与分类,但端口用于区分访问那个域名)
Accept:表示自身可接受的信息类容,相似建议,有子项
User-Agent:客户端标识信息(系统版本,浏览器,内核等)
Cookie:特殊的信息存储位置,用于自动交互,无需代码干涉
Referer:来源,即经过什么页面或文件触发的请求,若是是浏览器地址栏回车则没有该值
Connection:控制长短连接,告诉对方当前连接状态(Keep-Alive,Close)
Range:指定返回信息范围(断点持续子类使用)
Content-Type:请求正文的类型,编码等信息
Content-Length:请求正文长度
If-Modifiled-Since:缓存相关,本地文件的标识有效期
If-None-Match:缓存相关,本地文件的特征码,对应返回信息中的ETag
五:HTTP常规Header信息与做用(Reaponse)
Date:时间,通常是服务器当前时间
Content-Encoding:返回正文的压缩编码类型
Content-Length:返回正文的长度
Content-Type:返回正文的类型,编码等信息
Cache-Control:缓存机制以及策略,时间,方式等
Etag:返回文件信息的特征码
Expires:返回文件信息的缓存有限期
Set-Cookie:要求设置的Cookie,能够屡次出现的头信息
Location:自动重定向到其余新的地址,通常状态301,302时会出现
Connection:控制长短连接,告诉对方当前连接状态,默认Keep,当双方都为Keep时则连接会在下次沿用
HTTPS和HTTP的区别:
https协议须要到ca申请证书,通常免费证书不多,须要交费。
http是超文本传输协议,信息是明文传输,https 则是具备安全性的ssl加密传输协议。
http和https使用的是彻底不一样的链接方式用的端口也不同,前者是80,后者是443。
http的链接很简单,是无状态的。
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全。
HTTPS解决的问题:
1 . 信任主机的问题.
采用https 的server 必须从CA 申请一个用于证实服务器用途类型的证书. 改证书只有用于对应的server 的时候,客户度才信任此主机. 因此目前全部的银行系统网站,关键部分应用都是https 的. 客户经过信任该证书,从而信任了该主机. 其实这样作效率很低,可是银行更侧重安全. 这一点对咱们没有任何意义,咱们的server ,采用的证书无论本身issue 仍是从公众的地方issue, 客户端都是本身人,因此咱们也就确定信任该server.
2 . 通信过程当中的数据的泄密和被窜改