1.HTTPS协议
1.1.HTTPS简介
HTTPS也是⼀个应⽤层协议,是在HTTP协议的基础上引⼊了⼀个加密层。
HTTP协议内容都是按照文本的方式明文传输的,明文传输是不安全的,所以现在主流的解决 方式是在http所在的应用层和tcp所在的传输层之间加一层SSL/TLS软件层(SSL/TLS软件层属于应用层),SSL/TLS软件层对于从应用层流向传输层即发送的数据执行加密功能,对于从传输层流向应用层即接收的数据执行解密功能。
我们将包含了http协议和
SSL/TLS软件层整体成为https协议。
注:
1.对于http协议本身来说,其发出去的是明文信息,接收到的也是明文信息,本身不受任何影响。
2.http协议默认绑定的端口为80端口,https协议默认绑定的端口为443端口。
1.2.概念准备
1.2.1.什么是"加密"
•
加密就是把明文 (要传输的信息)进行一系列变换,生成密文。
•
解密就是把密文再进行一系列变换,还原成明文。
•
在这个加密和解密的过程中,往往需要⼀个或者多个中间的数据,辅助进行这个过程,这样的数据称为密钥。
注:所有的加密都是为了防止中间有人进行窃取和篡改。
1.2.2.为什么要加密
举个例子:
下载⼀个天天动听软件,未被劫持的效果,点击下载按钮,就会弹出天天动听的下载链接,如下图一所示,已被劫持的效果,点击下载按钮,就会弹出QQ浏览器的下载链接,如下图二所示。
如下图所示,由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器,交换机等),那么运营商的网络设备就可以解析出你传输的数据内容,并进行篡改。
点击 "下载按钮",其实就是在给服务器发送了⼀个 HTTP 请求,获取到的 HTTP 响应其实就包含了该APP 的下载链接。运营商劫持之后,就发现这个请求是要下载天天动听,那么就自动的把交给用户的响应给篡改成"QQ浏览器"的下载地址了。
所以,因为http的内容是明文传输的,明文数据会经过路由器、wifi热点、通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是中间人攻击 ,所以我们才需要对信息进行加密。
不止运营商可以劫持,其他的黑客也可以用类似的手段进行劫持,来窃取用户隐私信息,或者篡改内容。试想⼀下, 如果黑客在用户登录支付宝的时候获取到用户账户余额,甚至获取到用户的支付密码.....
在互联网上,明文传输是比较危险的事情!!!
HTTPS 就是在 HTTP 的基础上进行了加密,进⼀步的来保证用户的信息安全。
1.2.3.常见的加密方式
对称加密:
• 采用单钥密码系统的加密方法,同⼀个密钥可以同时用作信息的加密和解密,这种加密⽅法称为对称加密,也称为单密钥加密,特征:加密和解密所⽤的密钥是相同的。
• 常见对称加密算法(了解):DES、3DES、AES、TDEA、Blowfish、RC2等。
• 特点:算法公开、计算量小、加密速度快、加密效率高。
对称加密其实就是通过同⼀个"密钥",把明文加密成密文,并且也能把密文解密成明文。
例子:(⼀个简单的对称加密,按位异或)
假设明文a=1234,密钥key=8888,则加密a^key得到的密文b为9834。然后针对密文9834再次进行运算b^key,得到的就是原来的明文1234。(对于字符串的对称加密也是同理, 每⼀个字符都可以表示成⼀个数字)
当然,按位异或只是最简单的对称加密。HTTPS 中并不是使用按位异或。
非对称加密:
• 需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
• 常见非对称加密算法:RSA,DSA,ECDSA
• 特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。
非对称加密要用到两个密钥,⼀个叫做 "公钥",⼀个叫做 "私钥",公钥和私钥是配对的。最大的缺点就是运算速度非常慢,比对称加密要慢很多。
• 通过公钥对明文加密, 变成密文
• 通过私钥对密文解密, 变成明文
也可以反着用
• 通过私钥对明文加密, 变成密文
• 通过公钥对密文解密, 变成明文
例子:非对称加密的数学原理比较复杂,涉及到⼀些数论相关的知识。这⾥举⼀个简单的生活上的例子。
A要给B⼀些重要的文件,但是B可能不在,于是A和B提前做出约定:
B说:我桌子上有个盒子,然后我给你⼀把锁,你把文件放盒子里用锁锁上,然后我回头拿着钥匙来开锁取文件。
在这个场景中, 这把锁就相当于公钥,钥匙就是私钥。公钥给谁都行(不怕泄露),但是私钥只有B自己持有。持有私钥的⼈才能解密。
1.2.4.数据摘要和数据指纹
• 数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash函数)对信息进行运算,生成⼀串固定长度的数字摘要。数字指纹并不是⼀种加密机制,但可以用来判断数据有没有被窜改。
• 摘要常见算法:有MD5、SHA1、SHA256、SHA512等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)。
• 摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比。
数据摘要/数据指纹的应用举例:
百度网盘上传电影时,有时候可以秒传,妙传功能是如何实现的?用户在上传电影时,百度服务器会对上传电影进行搜索,搜索之前有没有用户上传过相同的电影,如果服务器中之前有用户上传过相同的电影,那么就终止本次上传,在上传用户目录下建立一个软链接,指向之前用户上传的相同的电影。
百度服务器如何快速作比对,检查上传电影是否与服务器内的电影相同呢?答案是使用单向散列函数对上传电影作数据摘要,与服务器内所有电影的数据摘要作比对即可,如果有相同的数据摘要,就说明该电影在服务器中有相同的资源。
1.2.5.数字签名
•
数据摘要在网络中最好也不要明文传输,摘要经过加密,就得到数字签名(数字签名后面会详细介绍)。