https详解
https讲解
https是基于http和SSL/TLS实现的一个协议,他可以保证在网络上传输的数据都是加密的,从而保证数据安全。
接下来我们从http协议开始,提出想法并逐步进行分析,最终实现Https。
- http协议是不安全的,所以有了https
- http(hypertext transfer protocol): 超文本传输协议,应用层的协议,基于tcp的
- https(hypertext transfer protocol over secure socket layer):名字上可以看出是安全套接字层之上的http协议,
s可以理解为SSL/TLS协议,其中TLS又是SSL的改进版本,https的安全数据传输就依赖于SSL/TLS协议
加密和签名的区别
加密:公钥加密,私钥解密叫加密
签名:私钥签名,公钥解密叫签名
公钥和私钥:公钥一般用来加密,私钥一般用来签名
通常公钥是可以公开出去的,私钥只能自己持有
加密的目的是非明文传输,加签的目的是防止篡改
对称加密:即加密和解密使用相同的密码
优点:使用简单、快捷高效
缺点:加密强度不高、秘钥分发困难
非对称加密:即一个公钥一个私钥
优点:加密强度高、秘钥分发简单
缺点:加密速度慢
rsa:512位秘钥,计算量大,难破解
信息摘要:一份长文件的数字指纹,可用于创建数字签名
md5: 128位散列值
sha: 160位散列值
md5+salt: 简单的md5密码加密,黑客可以通过密码md5比较,可以轻松试出密码
如果加上salt,密码加密之前拼上salt,然后再散列,黑客用自己密码和salt值试,就很难找到密码
使用对称秘钥进行加密数据会有问题
- 浏览器如何获取对称秘钥
- 每个客户端的对称秘钥相同,浏览器能拿到对称秘钥,那么黑客也能拿到,那么数据加密也就没有意义了
动态对称秘钥和非对称秘钥
- 为了解决对称秘钥的动态性和以及让客户端和服务端都能安全的获取到对称秘钥,需要引入非对称秘钥机制
如图:
...
一共分为12步骤
- 服务端先创建一对公钥/私钥
- 客户端向服务端发送请求,获取公钥
- 服务端把公钥返回给客户端
- 客户端保存服务端的公钥
- 客户端内部创建一个随机字符串来作为对称秘钥
- 客户端使用公钥对 对称秘钥(随机字符串)进行加密,发送给服务端
- 服务端使用私钥解密,获取到对称秘钥
- 服务端finished报文(双方都有了对称秘钥)
- 客户端使用对称秘钥对数据进行加密发送给服务端
- 服务端使用对称秘钥解密,获取数
- 服务端使用对称秘钥加密要响应的数据,发送给客户端
- 客户端使用对称秘钥解密数据
如此一来解决了动态对称秘钥和数据加密的问题,因为每个用户的对称秘钥都是随机生成
并且传输的过程中使用公钥加密(公钥加密的数据只有私钥才能解密),所有黑客无法获取对称秘钥
所有黑客即使能获取数据也无法解密看到真实内容,看似无懈可击,但是这么干还是有bug
如果黑客在步骤3劫持服务端返回的公钥,黑客将自己的公钥返回给客户端,
那么客户端会使用黑客的公钥来加密对称秘钥,黑客在步骤6截取,使用自己的私钥获取对称秘钥,后面过程全完蛋
相当于客户端和服务端中间多了一层黑客转发,黑客真是TM太坑了
CA证书的应用
- 使用CA证书可以解决黑客劫持的问
如图:
...
一共是14步:客户端、服务端、证书申请机构
- 网站开发完毕之后先向证书申请机构申请证书
- 机构会给申请者私钥和证书(包含公钥和企业信息)
- 网站开发者将私钥和证书配置到服务器
- 客户端向服务端发送请求,获取证书(包含公钥和企业信息)
- 服务端把证书(包含公钥和企业信息)返回给客户端
- 客户端校验证书的合法性,本地缓存校验或者向证书机构发请求校验
- 证书校验通过后,客户端生成一段随机字符串作为对称秘钥
- 客户端使用校验通过的公钥对对称秘钥(随机字符串)进行加密,然后发送给服务端
- 服务端使用私钥解密,获取对称秘钥
- 服务端finished报文,此时双方都有了对称秘钥
- 客户端使用对称秘钥加密数据,发送给服务端
- 服务端使用对称秘钥解密数据
- 服务端使用对称秘钥加密要响应的数据,然后发送给客户端
- 服务端使用对称秘钥解密服务端发送过来的数据
如此一来,解决了黑客劫持的问题,因为即使黑客在步骤5把服务端发送过来的证书劫持了,然后发送给客户端自己的证书
但是客户端在步骤6校验证书的时候会不通过,同时客户端也会提示错误信息
-
https是基于http和SSL/TSL实现的一个协议,其中前10个步骤称为SSL/TLS过程,
之后的传输数据就是利用http协议(收发数据) -
总结:以上就是https的实现原理,https可以保证数据的安全,但是由于通信过程会进行反复的加密和解密访问速度会有所下降(鱼和熊掌不可兼得)