本篇博文的目录:java
一:Http协议的优势与缺点算法
二:Https协议的特色浏览器
三:Https协议采用的加密技术安全
四:Https的安全通讯机制服务器
五:为何还有不少网站不使用Https网络
六:总结网站
一:Http协议的优势与缺点加密
1.1:http协议的优势3d
1.1.:效率高对象
限制每一个链接只有一个请求的无链接状态,在服务器处理完客户的请求,并收到客户的反应,即断开,经过这种方式能够节省传输时间。
1.1.2: 简单快速
当服务器客户端请求服务时,只需传送请求方法和路径。请求方法经常使用的GET,HEAD,POST。每种方法规定了客户端与服务器联系的是不一样的类型。由于简单的 HTTP 协议,通讯速度很快。
1.1.3: 灵活
HTTP 容许任何类型的数据对象的传输,输入被传输的内容类型进行标记。
1.1.4:无状态
HTTP 协议是无状态的协议,没有一个国家是没有协议的事务处理和存储能力。若是该状态是指因为缺少必要前述信息的后续处理中,它必须被重传,这可能致使在数据传输增长了每一个链接。另外一方面,当不须要在服务器上的快速响应的先验信息。
1.2:Http协议的缺点
1.2.1:有被窃听的风险,Http通讯使用明文,传输过程当中没有任何的保证措施,可能会被窃听
1.2.2:在传输过过程当中,不验证通讯方的身份,这中间就有可能被遭遇假装
1.2.3:Http只是对报文进行了解析,并无对其进行完整的校验,因此没法验证报文的完整形,可能被遭篡改
二:Https协议的特色
2.1:Https简介
Https并非一个崭新的协议,而是在http的基础上发展而来,意为http Secure.至关因而Http的升级版。它主要是为了解决http协议安全性不足的问题而诞生的。在使用https以后,访问浏览器的时候前缀由http变为https,如今咱们看到网站都采用https的协议比比皆是,好比:以下都是https的网站:
可见https已经深入的渗入到咱们的常常访问的网站中了,而关于它,本篇博文就来探讨一下http协议如何变为https.
2.2:Http+加密+认证+完整性保护=https
Https的通讯端口由SSL和TSL代替了,它是一种应用层协议。通常的状况下http直接和Tcp进行通讯,当使用了SSL以后,就会变成先和SSL通讯,SSL再和Tcp进行通讯,原理图以下:
当采用了SSL协议以后,Http协议就具有了加密、证书、完整性保护三大功能,SSL是独立于Http存在的,它是现存的普遍使用的网络安全技术。
三:Https协议采用的加密技术
3.1:SSL采用的加密技术
SSL采用的加密技术叫作“共享密钥加密”,也叫做“对称密钥加密”,这种加密方法是这样的,好比客户端向服务器发送一条信息,首先客户端会采用已知的算法对信息进行加密,好比MD5或者Base64加密,接收端对加密的信息进行解密的时候须要用到密钥,中间会传递密钥,(加密和解密的密钥是同一个),密钥在传输中间是被加密的。这种方式看起来安全,可是仍有潜在的危险,一旦被窃听,或者信息被挟持,就有可能破解密钥,而破解其中的信息。所以“共享密钥加密”这种方式存在安全隐患:
3.3.2:非对称密钥加密
“非对称加密”使用的时候有两把锁,一把叫作“私有密钥”,一把是“公开密钥”,使用非对象加密的加密方式的时候,服务器首先告诉客户端按照本身给定的公开密钥进行加密处理,客户端按照公开密钥加密之后,服务器接受到信息再经过本身的私有密钥进行解密,这样作的好处就是解密的钥匙根本就不会进行传输,所以也就避免了被挟持的风险。就算公开密钥被窃听者拿到了,它也很难进行解密,由于解密过程是对离散对数求值,这可不是垂手可得就能作到的事。如下是非对称加密的原理图:
四:Https的安全通讯机制
4.1:非称加密方式的缺点
公开密钥加密当然比共享密钥加密的方式提高了一个档次,可是它也存在两个问题:
第一个是:如何保证接收端向发送端发出公开秘钥的时候,发送端确保收到的是预先要发送的,而不会被挟持。只要是发送密钥,就有可能有被挟持的风险。
第二个是:非对称加密的方式效率比较低,它处理起来更为复杂,通讯过程当中使用就有必定的效率问题而影响通讯速度
4.2:Https采用混合机制的加密方式
https则综合了公开密钥加密和共享密钥加密的两种方式,充分利用二者的优点,在最初的链接的时候使用非对称密钥的加密方式保证链接的安全性,以后稳定的通信采用对称加密的方式,稳定的通信是指确保交换的密钥是安全的。
4.3:https的证书机制
在4.1中咱们讲了非对称加密的缺点,其中第一个就是公钥极可能存在被挟持的状况,没法保证客户端收到的公开密钥就是服务器发行的公开密钥。此时就引出了公开密钥证书机制。数字证书认证机构是客户端与服务器均可信赖的第三方机构。证书的具体传播过程以下:
1:服务器的开发者携带公开密钥,向数字证书认证机构提出公开密钥的申请,数字证书认证机构在认清申请者的身份,审核经过之后,会对开发者申请的公开密钥作数字签名,而后分配这个已签名的公开密钥,并将密钥放在证书里面,绑定在一块儿
2:服务器将这份数字证书发送给客户端,由于客户端也承认证书机构,客户端能够经过数字证书中的数字签名来验证公钥的真伪,来确保服务器传过来的公开密钥是真实的。通常状况下,证书的数字签名是很难被伪造的,这取决于认证机构的公信力。一旦确认信息无误以后,客户端就会经过公钥对报文进行加密发送,服务器接收到之后用本身的私钥进行解密。
4.4:关于客户端证书
客户端证书是进行客户端认证的,证实服务器正在通讯的客户端是安全的。可是使用客户端证书使用存在如下几个问题:
1:使用客户端证书,客户得本身安装证书,客户端证书是须要进行付费购买的,且每张证书对应到用户意味着须要支付用户数量对等的费用,这叫给用户带来了间接的问题。
2:客户端证书存在另外一个问题是,客户端证书只能证实客户端的存在,而不能证实用户本人的真实有效。
五:为何还有不少网站不使用Https?
Https既然如此安全可靠,为何还有不少WEB网站不使用Https的协议?这其中的缘由有如下几点:
5.1:加密通讯会消耗必定的cpu和服务器资源,若是每次通讯都加密,就会消耗更多的资源
5.2:若是全部的信息都采用https加密,这无疑是一种浪费。非敏感信息就算被窃取了,也无伤大雅。能够在其传输敏感信息的时候,采用https协议进行加密
5.3:购买证书的开销也是一笔很大的费用。向认证机构购买证书,证书价格会根据不一样的认证机构略有不一样,而通常的受权须要折合人民币600多元。
六:总结
本篇博文由http协议出发,主要介绍了https协议,并对其加密机制进行了简介,梳理其优缺点及其使用场景。做为一名java开发者,应该对https有所了解,明白其背后的机制,不用深究其细节,此乃本篇博文的初衷。