首先要先了解几个基本概念
HTTP(HyperText Transfer Protocol:超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发布和接收 HTML 页面的方法,被用于在 Web 浏览器和网站服务器之间传递信息。
HTTP默认是工作在TCP协议80端口,用户访问网站 http:// 打头的都是标准 HTTP 服务。
HTTP协议以明文的形式发送内容,不对数据进行任何加密,容易受到攻击拦截获取到信息,因此HTTP不适合传输敏感信息,比如信用卡号,密码等支付信息。
HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议)是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
HTTPS默认工作在TCP协议443端口,它的工作流程一般如下:
1、TCP 三次同步握手
2、客户端验证服务器数字证书
3、DH 算法协商对称加密算法的密钥、hash 算法的密钥
4、SSL 安全加密隧道协商完成
5、网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改。
对称加密:用同一把钥匙进行加密和解密;
非对称加密:两把不同的钥匙,一把公钥,一把私钥,用公钥来加密明文,用私钥来解密密文;
这里要说一下这两种加密方式的优缺点
column1 | 非对称机密 | 对称加密 |
---|---|---|
速度 | 慢 | 快 |
效率 | 低 | 高 |
安全性 | 高 | 低 |
常见算法 | RSA\DH | AES\DES\IDEA |
从表格中我们可以看出,非对称机密虽然安全性高,但是速度慢、效率低;而对称加密安全性低,却速度快,效率高,那如何选择使用,才是一种最优做法呢?
答案就是两者结合,在Https传输过程中,客户端和服务端使用非对称加密生成对称加密的密钥,然后用对称加密传输网络中的数据。这就是最优解。
那么钥匙哪里来的呢?从CA(数字证书认证机构)机构来,正规的Https都是需要从CA机构那边申请获取证书的,当然是要收钱的,也可以自己本地生成,区别在于自己制作的证书需要客户端验证通过才能继续访问。
那证书到底是什么,其实证书就是一对公钥跟密钥,可以理解证书就是你去商店买的一把锁,你买的锁肯定是一套的,一个锁头,一把钥匙,你可以用锁头锁上你所要锁上的东西,但是钥匙只有一把啊,就在你手上,只有你一个人能打开锁拿出东西,所以公钥就是锁头,可以锁住https传输过程中的数据,确保安全,而私钥就是要解开这把锁拿到数据的钥匙。
还有一点需要知道的是,这个证书本身是包含很多信息,比如颁发机构,可以理解为生产这个锁的地方,还有过期时间,每个东西都有保质期的嘛,还有一起其他的信息等。
接下来就是我们本篇文章的重点,Https在传输过程中,是如果结合对称加密和非对称加密,然后进行数据安全传输的。
非对称加密的公钥跟私钥我们已经有了,就是证书,是服务器去向CA机构申请获取的。
第一步,客户端去请求Https的时候,可以获取到证书,也就是非对称加密的公钥跟私钥,这部分工作是通过客户端的TLS来完成的,首先会去验证公钥是否有效,比如颁发机构,过期时间等,如果发现异常,则会弹出一个警告框,提示证书存在问题;(这个跟我们平时访问一些小网站是同个道理 😏);如果证书没有问题,那么就会生成一个随机值,注意了,这个随机值其实就是对称加密的钥匙,用证书对这个随机值进行加密得到密文,也就是用公钥对随机值进行加密,只有私钥才能解密获取随机值。
第二步,数据传输到服务器,服务器获取密文后,用证书中的私钥对密文进行解密,这样服务器就已经获取到了随机值,也就是对称加密的钥匙,这样子客户端拥有对称加密的钥匙,服务端也有了同样一把钥匙,后面传输数据就可以通过这个随机值(钥匙)来进行加解密了。
第三步,服务端传输数据给客户端,用的是第二步获取到的随机值(钥匙)对数据进行对称加密,数据到达客户端之后,客户端也要随机值(钥匙,与服务端同一把)解密,如此来进行通信。
通过上面可以得出,第一、二步主要是利用非对称加密的安全性来传输对称加密的钥匙,当客户端跟服务端都拥有同一把对称加密的钥匙之后呢,再通过这把钥匙来进行通信,也就是其实通信用的是对称加密的方式,所以效率高,速度快。
以上就是https传输数据中对称加密与非对称加密结合起来的使用详情,既安全又高效