http协议全称超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
由于是明文传输,那么传输过程中带来的信任问题就由此而来,如果有人劫持了网络请求,就可以知道你传输的内容了,这样浏览器和客户端之间的所有数据都可以被获取,这样就无秘密可言,所以需要对信息加密,防止被获取,加密算法:
虽然采取加密算法,但依旧有问题,如果有一个中间人,获取了客户端发给服务端的公钥,然后替换成自己的公钥,再把自己的公钥发给服务端,并且把服务端的公钥换成另一个自己的公钥,发给客户端,这样自己做中间人,可以对双方的传输内容做加密解密,依旧可以拦截、篡改内容。这些问题 说到底还是怎么验证一个服务端的连接是否合法的。这就需要CA数字签名+数字证书。
两个机器之间通信,公钥是公开的,那么公钥和机器怎么对应上?你说A机器的公钥是X,但是也可能让人给改了,改成了别人的公钥Y,需要一个国际认证机构来管理和认证,他们来认证公钥与网站的映射关系。这就是CA机构,它就像是第三方,把所有数据进行封装。它会给一个网站颁发一个证书,这里面包含了网站的域名信息、公钥等,它会对证书生成数字签名,并把证书和数字签名一起封装发给服务端,并且操作系统、浏览器本身会预装一些它们信任的根证书,如果其中会有CA机构的根证书,这样就可以拿到它对应的可信公钥了。这个公钥对应的密钥非常重要,由CA机构保管,其中如果有泄漏,则会导致大量的网站信任问题。
我们把证书内容生成一份“签名”,比对证书内容和签名是否一致就能察觉是否被篡改。这种技术就叫数字签名,数字签名的制作过程:
这里的hash其实是MD5、SHA256这样的算法。明文和数字签名共同组成了数字证书,这样一份数字证书就可以颁发给网站了。那浏览器拿到服务器传来的数字证书后,如何验证它是不是真的?(有没有被篡改、掉包)
浏览器验证过程:
这里回到刚刚提到的问题:为什么制作数字签名时需要hash一次?
我们是不会觉得以上过程中hash有点多余,把hash过程去掉也能保证证书没有被篡改。因为我们可以对明文加密。说到底还是性能问题,非对称加密效率较差,加密的内容越多越耗时,证书信息一般较长,比较耗时。而hash后得到的是固定长度的信息(比如用md5算法hash后可以得到固定的128位的值),这样加密解密就会快很多。也有安全上的考虑,具体可以去参考其他博客。
篡改之后,hash之后的值跟数字签名就对不上了。
如果证书被掉包,换成其他的伪造证书,则拿ca机构的公钥,解不开数字签名。
在网站通过SSL来与用户建立安全的通信中,对称加密算法和非对称加密算法起到了很大作用。客户端和服务器的握手阶段使用的是非对称加密算法,传输数据节点使用的是对称算法,这主要是因为对称算法效率比非对称要高。
在握手阶段,客户端、服务器之间会协商才去的加密方式,客户端也会提供对称密钥,用于双方加密、解密数据。对称加密虽然性能好但有密钥泄漏的风险,非对称加密(2组公钥+2私钥双向传输)安全但性能低下,因此考虑用非对称加密来传输对称加密所需的密钥,然后进行对称加密,但是为了防止非对称过程产生的中间人攻击,需要对服务器公钥和服务器身份进行配对的数字认证,然后引入了CA数字签名+数字证书验证的方式!这是我梳理的整体逻辑流程。
对http进行了封装,http超文本传输协议,明文协议,于是容易被获取重要信息。变采用了基于ssl加密的https协议,用与客户端、服务器的数据传输。因为http是明文传输,所以有数据泄漏的安全问题,由此提出来了https协议,具有一下特点:
数字证书内容包括了:
比如你如何确信这个网站是一个好网站?好网站就会有一个“好网站证书”,也就是certification,这个证书是由CA(certificate authority)颁布的,
如果有一个钓鱼网站伪装证书,我们来看下能不能成功,CA机构在颁发证书之前会用自己的私钥对其加密,所以浏览器上的根公钥才可以解密,钓鱼网站的证书因为不是私钥加密,所以根据无法解密,也就得不到假的证书中的信息,不过好像这个公钥是对证书的签名进行加密,然后再通过签名方法对证书内容计算得到新签名,对比两个签名是否一样来证明证书内容是不是被篡改了
这里要注意:
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- ryyc.cn 版权所有 湘ICP备2023022495号-3
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务