写给前端工程师的理论基础(2)--HTTPS协议与密码学
来源:互联网 发布:windows域 编辑:程序博客网 时间:2024/06/08 08:05
上一回写的是Session与Cookie方面的内容,这一次,写一下HTTPS协议和有关密码学方面的内容。
HTTP协议我们都已经知道了,这一一种基于TCP协议的,非持久连接的,传输文本流(以文本为内容,非二进制的比特流)的协议。
这种协议的特点上面已经说得差不多了,HTTP协议里面又很多的信息,包括表明身份的cookie,包括从哪来的referer,包括服务器版本号和服务器时间的服务器信息,包括编码和地区/语言等信息。
这些信息都是一些表明具体连接环境的附加信息,真正的网页内容在这些信息后面被编码(例如url编码,POST文件这种二进制信息)后进行传送。
那么HTTPS协议是什么呢?由于传统的HTTP协议是一种明文的数据,这种数据很容易被截获,也很容易伪造。
在信息安全中,这种截获是一种被动攻击,截获的数据中可能包含用户的敏感信息;伪造,是一种主动攻击,攻击者可以仿造获取的原数据包的内容,然后修改其中的某些关键信息,达到伪造数据的目的。
例如,因为cookie尚且在有效的生命周期内,改一改关键的上传信息,可以发一些广告了之类的东西,也都是可以的。
而这样的一种明文环境,如果在正常用户使用的时候,也没什么,无非就是信息泄露了而已,而如果用在电子商务这种关键的场景,可能就会出现一些问题。
后来,为了针对这种明文的环境,设计出了一种HTTPS协议。
HTTPS和HTTP协议相比,无非就是多了一个加密机制,让截获者无法获取其中的内容,同时,这种协议对服务器也是一种验证,用户也可以根据证书来判断服务器是否是可靠的。
下面,我们来简单说说这种HTTPS协议:
HTTPS协议,是HTTP协议在SSL加密准则下的加密产物。SSL加密不是具体的一种算法,SSL是一种协议,这种协议介于HTTP协议和TCP协议之间。具体的加密算法往往是RSA算法(取决于证书),当然,在某些场景,你也可以使用其他的例如椭圆曲线等等这类的算法,不过,对于大多数情景,使用的都是RSA算法,我们来用最通俗易懂的方式,说说RSA算法。
RSA算法,是一种非对称加密算法,所谓非对称加密算法,是针对传统的对称加密算法来说的。
例如,我的开机密码是123456,我只能通过123456来解密,其他的当然不可以。那么,也就是说,加密和解密的秘钥(你可以理解为密码)是相同的,类似的情景还可以是一把钥匙开一把锁。
设想这样的场景,对于这种加密方式,如果在网站数据加密的时候,怎么应用呢?
网站对内容加密了,然后我想看到具体的内容,我必须要知道密码呀,那网站告诉我密码是123456了,那对于别人呢,自然也告诉他们密码。那既然所有人都知道密码了,那它还叫密码吗?
解决的方案似乎是大家的密码都不同,只有网站自己知道谁的密码是什么,但是,这种情况,密码量也太大了点儿吧。
那怎么办呢?设想这样的场景:
网站的加密密码只有他自己知道,我们称之为私钥;当用户浏览网页时,浏览器会从网站那里,得到网站告诉他的解密秘钥,这个秘钥由于是公开给客户的,我们称之为公钥。
也就是说,公钥是大家都可以知道的,私钥只有他自己知道,注意,这里我们说,如果用私钥加密,私钥自己是解不开密码的,必须用公钥才能解开,反过来,如果用公钥加密了,自己用公钥也没法解开,必须是用私钥才能解开,这样,通俗点儿说,就是自己加密了,自己没法解开,必须给别人解开,这样,一个既能加密又能解密的秘钥就被分成了两部分,这两部分是相辅相成的,组成了一个密钥对。
两个情景:
1.验证:私钥加密,公钥解密
2.加密:公钥加密,私钥解密
你可以设想,公钥是大家都知道的,以加密为例,你给大家发锁头,只有你自己才有钥匙,这个内容自然只有你自己知道了。
那么验证来讲,用私钥加密了,然后大家都能解密,如果确实能解开密码,则可以确认这就是具有私钥的人加的密,不然我的钥匙打不开这把锁,这样确认了身份的过程,就是验证了。
SSL协议就是这样一种公私分离的方式,在具体的情况下,客户会用服务器给的公钥随机生成一个主密钥,服务器反过来测试一下客户是不是可靠的,如果可靠的,就会用这个随机产生的主密钥加密数据进行通信了。
- 写给前端工程师的理论基础(2)--HTTPS协议与密码学
- 写给前端工程师的理论基础(1)--Cookies与Session
- 写给前端工程师的理论基础(4)--详解SSL
- 写给前端工程师的理论基础(3)--websocket这一篇就够了
- 写给初学前端工程师的一封信
- 写给想成为前端工程师的同学
- 写给初学前端工程师的一封信
- 写给初学前端工程师的一封信
- 写给初学前端工程师的一封信
- 密码学基本概念与信息理论基础学习笔记
- 写给想成为前端工程师的同学们
- 写给想成为前端工程师的同学们【转】
- 月影谈:写给想成为前端工程师的同学们
- 写给想成为前端工程师的同学们
- 写给想成为前端工程师的同学们
- 写给想成为前端工程师的同学们
- 基础密码学与https配置
- 写给想成为前端工程师的同学们 —— 前端工程师是做什么的?
- vue动态载入变量键值名,实现数据双向绑定
- 重建二叉树
- 前端代码检测利器——eslint for sublime安装指南
- VC++6.0插件系列(绝对经典)
- PAT a1006题解
- 写给前端工程师的理论基础(2)--HTTPS协议与密码学
- 2、成员内部类常用修饰符(private和static)
- linux 常用命令
- Postgresql 窗口函数示例
- oracle数据库字符格式修改
- python学习之模块
- Web前端知识体系精简
- PAT a1008题解
- 数据挖掘概念与技术-阅读笔记1