http是明文传递,在通信过程中可能被拦截利用,造成不可挽回的结果,使得内容在传输路上不被拦截,串改,冒充发信人,只给想让看到的人看到,中间过程必须安全,针对安全性就出现了https可以满足安全性,那https安全性怎么实现?
通过加密来实现(先认识个大概,往下细看)
加密手段有哪些
先了解一下流行的加密手段,然后分析一下https选择哪个。
对称加密
对一段文字加密,使用一个密钥S,密钥S即可以加密又可以解密,如果双方都有密钥S,即可实现私密通信,中间拦截得到的是加密过的信息。
对称加密名字我感觉就是两边传递信息流程一样对称所以叫对称加密,自己理解的
使用对称加密实现https的话就会陷入死循环了。
非对称加密
非对称加密中有一个公钥一个私钥是一对,公钥加密,私钥解密用。
明文互相发出自己的公钥s,公钥k,接收到的信息用私钥s,私钥k来解密,看似美好,但是耗时太久了,不能接收,还有其他更好的方式来进行数据安全性保障。
https使用的加密手段
先说结论,使用非对称加密和对称加密结合,对称加密痛点是第一个密钥同步问题,非对称加密痛点是耗时。先用非对称加密单向传递对称加密用的密钥s,这样就有了对称加密密钥s同步,后面就用密钥s进行对称加密。
本以为是完美的方式当也总有一些小技巧来破坏和平,只使用密钥技术似乎是无法解决这种问题了,像套娃一样。
关于数字证书,数字签名
上文分析了仅仅加密似乎无法解决问题了,于是引入了数字证书,数字签名。
数字证书是权威机构发给服务器譬如百度,电脑的操作系统中保有这个数字证书,或者能找到这个证书的网站的证书也叫根证书,类似于dns中根服务器概念,总之一定能找到正确的数字证书,说明公钥与网站的对应关系。
数字签名,就是数据hash之后再用私钥进行加密,打上网站烙印,接收方收到之后,解开烙印用私钥,能解开说明就是来自那个网站,寄信人对了,解开之后是一段hash值,发送来的不仅有数字签名还有数据,此时对数据hash和解密之后的hash对比,没错,说明内容没有更改。这样就确定了没有中间人插手修改了数据并且数据是直接在接收方和放松方进行的。
对流程安全性疑问说明
问解密的公钥你咋一定确定是百度网站的呢?
答:操作系统、浏览器本身会预装一些它们信任的根证书,如果其中会有CA机构的根证书,这样就可以拿到它对应的可信公钥了。
问制作数字签名为什么要进行hash一下?
答:不hash,解密之后直接比较内容好像也是可以得到内容是否被修改过的结果。性能问题,公钥私钥其实也是非对称加密的问题,hash之后比较短一般,md5算法hash后可以得到固定的128位的值,利于解密过程,可以提高性能。
大致流程