1.前言
2.我为什么要写这篇文章呢?
2.因为我好想发公众号啊!
好,闲言少叙,进入正题。
3.说https之前,先说一下http为什么不安全,体现在哪里?怎么演示出来?
大家都知道,http是明文传输,但是也有不少人这样想:虽然是明文传输,但我也没遇到什么不安全的问题呀,所以我也没必要搞https!
我只能给出以下几点解释:
你很幸运,没被盯上 。
你的网站没啥流量,搞你没啥价值。
你的账号密码等隐私信息已经被窃取,而你依然浑然不知。
第二步:手机连接热点
第三步:手机访问登录页并登录
第四步:查看电脑抓的包
现在试想一下,如果你连接的wifi甚至你本地的运营商就有问题(为了利益),那他是不是就可以为所欲为了。
窃取你的隐私信息 。
修改服务端返回的信息,加入一个js广告文件,此时广告就满天飞了。
修改服务端返回信息,直接给你重定向到钓鱼或者广告网站,想一想你有没有遇到过类似情况:你打开一个网站,却自动跳转到了其他“垃圾”网站。
修改服务端返回信息,你发现电脑角落里却突然出现了个很诱人的打怪升级的游戏图片。
4.https为什么就安全了?他是怎么保证安全的?
在介绍如何加密问题前,先简单介绍一下加密的大致种类。
加密的大致种类:
典型用途:
密码总不能明文存到数据库吧,所以一般加密存起来,只要用户的输入经过同样的加密算法 对比一下就知道密码是否正确了,所以没必要可逆。
2、可逆加密。
对称加密。比如:AES、DES、3DES、IDEA、RC4、RC5、RC6
典型用途:
用同一个密码加密和解密,太常见了,我用密码加密文件发给你,你只能用我的密码才能解开。
非对称加密(就是公私钥)。比如:RSA、DSA、ECC
典型用途:
加密(保证数据安全性)使用公钥加密,需使用私钥解密。
认证(用于身份判断)使用私钥签名,需使用公钥验证签名。
介绍完加密种类,接下来说说如何加密
用不可逆加密可行吗?
首先不可逆加密的是不是可以直接排除了,不知道为啥的,可以想一想自己的目的是什么哈。
用对称加密可行吗?
用非对称加密(rsa)可行吗?
用非对称加密 + 对称加密可行吗?(行也得行,不行也得行,因为也没有其他方式了)
其实根本原因就是浏览器无法确认自己收到的公钥是不是网站自己的。
如何保证浏览器收到的公钥一定是该网站的公钥
什么是数字证书?证书都包含什么?
1、网站域名
2、证书持有者
3、证书有效期
4、证书颁发机构
5、服务器公钥(最主要)
6、接下来要说的签名时用的hash算法
什么是数字签名?签名的过程是什么
1、CA机构拥有非对称加密的私钥和公钥。
2、CA对证书明文信息进行hash。
3、对hash后的值用私钥加密,得到数字签名。
浏览器收到服务下发的证书之后,拿到证书明文和签名,怎么验证是否篡改了呢?
1、拿到证书里面明文的hash算法并对明文内容进行hash运算,得到A 。
2、用CA的公钥解密签名得到B 。
3、比较A 和 B,如果相等,说明没有被篡改,否则浏览器提示证书不可信。
有没有发现一个问题?CA的公钥从哪里获取呢?
简单总结一下:
如果证书被篡改,浏览器就提示不可信,终止通信,如果验证通过,说明公钥没问题,一定没被篡改。
公钥没被篡改,那浏览器生成的对称加密用的密钥用公钥加密发送给服务端,也只有服务端的私钥能解开,所以保证了 对称密钥不可能被截获,对称密钥没被截获,那双方的通信就一定是安全的。
黑客依然可以截获数据包,但是全都是经过对称加密的密钥加密的,他也可以篡改,只是没有任何意义了,黑客也不会做吃力不讨好的事了。
结语
当然,https本身的加密流程比上面说的还要复杂一些,但主流程大致相同,下次面试再被问到https为什么安全时,不要再简单的说 ”因为加密了“,这是一个很能体现能力的问题,不要浪费掉。
以上是个人的一些理解,欢迎各位读者多来交流。
几个问题
1、为什么charles等抓包工具或者浏览器控制台看到的https返回是明文的?
2、为什么制作数字签名时需要hash一次?
推荐阅读
站长 polarisxu
自己的原创文章
不限于 Go 技术
职场和创业经验
Go语言中文网
每天为你
分享 Go 知识
Go爱好者值得关注