本篇博文的目录:
一:Http协议的优点与缺点
二:Https协议的特点
三:Https协议采用的加密技术
四:Https的安全通信机制
五:为什么还有很多网站不使用Https
六:总结
一:Http协议的优点与缺点
1.1:http协议的优点
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有所了解,明白其背后的机制,不用深究其细节,此乃本篇博文的初衷。