Https是一个比较老套的话题,也是面试过程中经常被问到的问题。但是当被问到https为什么安全的时候,很多人的回答很简单:因为是加密的!然后就没有了!他相当于什么都不回答!我为什么要写这篇文章?网上的张文有的不全面或者不容易理解,有的甚至在理解上有偏差,可能会对学习者造成更多的疑惑;
在谈https之前,先说一下为什么http不安全,体现在哪里。如何论证?众所周知,http是明文传输的,但是很多人是这样想的:虽然是明文传输,但是我没遇到什么不安全的问题,不用搞https!我只能给出以下解释:你很幸运没有被盯上。你的网站流量不大,让你一文不值。你的账号密码等隐私信息被盗,但你还是不知道。接下来,我将向您展示为什么http不安全。所有人都已接入公共wifi。这里我用电脑打开一个热点,然后用手机连接到热点,再用手机访问一个http登录界面,输入账号密码登录。我用wireshark抓取我电脑上的数据包。第一步:电脑打开热点,打开wireshark准备劫持数据包。第二步:将手机连接到热点。第三步:手机访问登录页面,登录。第四步:检查电脑抓到的数据包。问题清楚了吗?你的账号密码是明文传输的(密码在前端md5后传输),中间的wifi(准确的说是路由器)可以直接截取查看。如果可以截取查看,是否可以篡改?答案当然是肯定的。现在想想,如果你连接的wifi甚至你的本地运营商有问题(为了利益),他能为所欲为吗?
例如:窃取你的私人信息。修改服务器返回的信息,添加一个js广告文件。这时,广告会满天飞。修改服务器返回的信息,直接重定向到钓鱼或广告网站。想想你是否遇到过类似的情况:你打开一个网站却自动跳转到其他“垃圾”网站。修改服务器返回的信息,你会发现电脑的角落里突然出现一张诱人的玩怪升级的游戏图片。说到这里,是否足以说明http本身确实存在安全问题?如果你的回答还是否定的,建议把上面的内容看几遍,给自己洗脑!
https为什么安全?他是怎么保证自己安全的?想到安全,就会先想到,再加密!所以第一个问题就产生了,怎么加密?在介绍如何加密之前,先简单介绍一下加密的一般类型。加密的一般类型:1.不可逆加密。例如MD5、SHA、HMAC。典型用途:密码不能以纯文本形式存储在数据库中,所以一般是加密存储的。如果用户的输入和同样的加密算法比较,就知道密码是否正确,不需要可逆。
可逆加密。对称加密。例如:AES、DES、3DES、IDEA、RC4、RC5、RC6。典型用途:用同一个密码加密和解密文件是很常见的。我加密文件并发送给你,但你只能用我的密码解锁。非对称加密(即公钥和私钥)。例子:RSA,DSA,ECC。典型用途:加密(确保数据安全)使用公钥加密和私钥解密。认证(用于身份判断)使用私钥签名,需要公钥验证签名。在介绍了加密的类型之后,我们来谈谈如何加密。不可逆加密可行吗?首先,不可逆加密可以直接排除。不知道为什么,可以想想自己的目的是什么。
对称加密可行吗?如果双方持有相同的密钥,并且没有其他人知道,则可以保证双方之间的通信安全。但最大的问题是如何让密钥为双方所知,不被他人所知。你想想:不管怎么传输,中间的密钥是否有可能被截取,其他的安全性是不是都不可能谈。似乎单纯的对称加密无法解决http的安全问题。