目前市场上得书籍很少能将http相关知识讲的很清楚,很多开发在这一块的体系知识需要得到补充,当然也包括我。无意间,看到一本 日本人写的 《图解http》书,发现里面讲的很细致,并且以图形得方式深度还原http之间的联系,值得推荐,于是好记性不如烂笔头,开始记录吧,本文主要是针对第七章记录,共11章,每个章节都会做详细的讲解
为什么要每年花钱买https服务呀,本章就是讲为什么要花这个钱
http是相当优秀的,不过在优秀的人也有缺点,比如它有:
1. 通信使用明文可能会窃取
因为http它没有加密的功能,所以都是通过明文来传递,所以它很容易被窃取,而窃取主要的目标是TCP/IP 网络。
上图就非常明显的显示了窃听的位置,如果一个黑客在任意一个位置去植入病毒,并且篡改了报文信息,那对服务器会是一个非常大的伤害,比如现在市场上非常流行的测试人员工具 wireshark,就可以完整获取到http协议请求和响应内容
对上图的窃听目前的解决办法是
对报文进行:
A. 通信的加密 通过和SSL(安全套接层) 或TLS租的组合使用,加密http的通信内容,与SSL建立安全通信路线,就成为HTTPS
B. 内容的加密 对http请求报文首部和实体进行加密,使用加密规则,对应服务器则需要解密规则。加密规则可以选择合适的方案(md5、SHA-1等等)
2. 不验证通信方的身份,因此可能遭遇黑客伪装
因为http协议中服务器不会对客户端请求进行限制,只要是客户端都可以访问到这个服务器,所以会出现无法确定响应服务器是不是需要的那台服务器、所需的客户端是不是服务器需要的、无法确定客户端是否有这个权限,无法判断请求是谁请求、无法阻止瞬时大批量请求的DOS攻击
所以这些都需要SSL来完成,SSL证书是第三方机构颁发的,用于证明服务器和客户端是实际存在的,
客户端 (客户端会在请求前先去第三方公司SSL证书去确定是不是A公司服务器,是则访问,否则拒绝访问) -----------> A公司web服务器
3. 无法证明报文的完整性,因为可传可不传,所以可能会篡改
因为http协议中服务器不会对请求和响应进行加密,在请求和响应过程中,病毒会在中间进行篡改(客户端 <--- 病毒 ----> 服务器),而客户端和服务区也无法判断出是否被篡改,上面所说的MD5和SHA-1虽然能对报文进行加密,但是病毒也会去篡改,所以解密出来的数据也可能会有问题,所以我们还得使用SSL
http + 加密 + 认证 + 完整性保护 = https
https 并不是应用层的新协议。只是在http接口上包装了一层SSL和TLS协议代替而已。通常http直接和tcp通信,但是加上了SSL后就成了HTTPS
http: 应用http -> tcp -> ip -> MAC https: 应用http -> SSL -> TCP -> IP -> MAC
SSL不仅仅只是服务于http的协议,而是其他的协议都能结合使用,比如SMTP,TEINT, FTP等
SSL这么厉害,那到底SSL是怎么加密的?
其实区块链虚拟币就是沿用了这套规则,加密和解密都会用到秘钥,当然秘钥被黑客拿到,那这个ssl也没用了,任何人都能打得开,看到明文,就像区块链,任何人都可以提走BTC
客户端加密 <-------不管加密还是解密都需要密钥--------> 服务端解密
那如何保证客户端把加密的信息和密钥发给服务端,或者服务端发解密和密钥给客户端的时候,不被病毒从中拦截呢
那就区分公钥和私钥的关系,公钥的加密是公开的,可以转交给任何人,但是没有私钥密码只有指定人才知道,就像区块链的钱包,创建账号的时候它会成功公开的钱包地址,任何人都可以往这个地址里面转币,但是要提取和解析,必须要本人输入私钥才能进行操作,如果别人想要破解私钥,目前的算力是办不到的,所以这也为加密的方法增加了可靠性 公开密钥进行匹配和确认,私钥用于解析
https 的公开加密和共享加密的区别?
1. 公开加密(Public Key Encryption) :
-
在公开加密中,数据使用一对密钥进行加密和解密:公钥和私钥。
-
公钥是公开可见的,用于加密数据。私钥则保密存放,用于解密数据。
-
当通信双方需要交换数据时,他们可以使用对方的公钥来加密数据,只有持有对应私钥的接收方才能解密数据。 - 这种加密方法提供了安全的通信方式,因为即使公钥被泄露,也不会影响数据的安全性,只有持有私钥的一方才能解密数据。
-
优点:
- 安全性高:公开加密使用一对密钥,保护数据的传输和存储。即使公钥泄露,也不会影响数据的安全性,因为只有持有私钥的一方才能解密数据。
- 不需要提前共享密钥:发送方和接收方不需要在通信之前共享密钥,因此不需要建立安全的密钥分发渠道。
- 适用于非对称通信场景:当通信双方之间没有预先建立安全通道时,公开加密提供了一种安全的通信方式。
2. 共享加密(Shared Key Encryption) :
-
共享加密使用同一个密钥来加密和解密数据。
-
发送方和接收方必须在通信之前协商共享同一个密钥。
-
这种加密方法要求发送方和接收方之间提前建立一个安全的渠道来共享密钥,因为如果密钥被第三方获取,通信内容就会暴露。
-
优点:
- 加解密速度快:相比公开加密,共享加密通常更快,因为不涉及复杂的公钥加密和解密运算。
- 较小的计算资源需求:共享加密算法通常更适合在资源有限的环境中使用,例如嵌入式系统或移动设备。
-
适用场景:
- 大规模数据传输:在需要频繁传输大量数据的场景下,共享加密可能更适合,因为它的加解密速度更快。
- 内部网络通信:对于内部网络通信,可以使用共享密钥来加密数据,因为通常可以更容易地管理和保护共享密钥。
- 对称通信场景:在通信双方之间可以共享密钥并确保其安全性的情况下,共享加密是一个合适的选择。
但是不管是公开加密和共享加密的方式还是有问题,因为发送方和接受方,不能明确对方的参数一定是满足当前的。所以我们还需要一个数字证书去验证双方公开加密得数据是否有效,“威瑞信”CIA 就是一家数字签名的公司,用户去平台注册,提交公开密钥的申请,,然后分配已签名的数字签名,然后将SSL证书和当前数字签名绑定在一起放在服务器,接收到的服务端可以根据数字认证的签名进行有效验证,确认当前数字签名是否有效
EV SSL证书
这个证书一般很少有人知道,如果使用了这个证书,会在地址栏左侧显示SSL证书并且地址栏的背景颜色会变成绿色,它主要有两个功能。一个是用于证明通信一方的服务器是否规范,二是确认对方服务器运营的企业是否存在
以上提出的SSL证书,都是基于第三方可信任机构,但是openSSl提供了一套开源的SSL证书,服务器也可以用,但是浏览器访问服务器时,会显示“无法确认连接安全性或网站安全证书存在问题”的弹框警告信息
为了更直观的了解HTTPS,以下是https的流程
说了这么多HTTPS那它就全是优点吗,那它的缺点是什么呢?
由于https需要做服务器,客户端双方的加密以及解密,会消耗CPU和内存等硬件资源以及网络资源,所以网络负载延迟会比http慢2~100倍,如果不是非加密型数据的网站可以不用购买https证书,因为一年也需要至少600rmb以上,而且会在客户端和服务端双方进行加密和解密的操作,这样会大大影响cpu的运算能力,所以根据实际情况着重考虑