文章目录
- HTTPS简介
- 关于加密过程中的名词
- SSL中的加密操作
- 对称加密
- 非对称加密
- 证书
- HTTPS执行流程总结
HTTPS简介
HTTPS协议也是应用层的协议,它是在HTTP协议的基础上引入了加密层,称为SSL
(旧的叫法)或TLS
(新的叫法)
为什么需要加密呢?
HTTP协议是以明文方式传输的,在传输数据的过程中,数据有可能被篡改,如我们在下载软件的时候,下载的软件有时候不是我们预期的软件,这就是臭名昭著的运营商劫持
数据在进行网络传输的过程中,会经过路由器,交换机(运营商的网络设备)等,那么运营商的设备就会解析出你传输的数据然后进行篡改,除了运营商,其他黑客也可以用类似手段进行窃取用户信息或篡改内容,所以在互联网上,明文传输比较危险的,所以HTTPS协议就在HTTP协议的基础上进行加密来保证用户的信息安全
关于加密过程中的名词
明文
就是传输的原始数据密文
就是经过加密后的数据,别人看到了也看不出啥结果加密
就是把明文经过一系列转换变成密文解密
就是把密文经过一些列转换变成明文- 加密和解密过程需要一个辅助数据,该数据称为
密钥
SSL中的加密操作
对称加密
对称加密就是客户端和服务端持有一个相同的密钥,通过该密钥可以将明文加密成密文,也可以将密文解密为明文
一个服务端是为多个客户端服务的,如果所有的客户端的密钥都相同,那么黑客也就很容易拿到这个密钥(通过构造一个客户端就可以拿到),所以所有客户端都必须是不同的密钥,既然需要不同的密钥,那就要让服务端记录不同客户端对应的密钥而且客户端和服务端可以传递这个密钥
但是如果把密钥明文传输,那么黑客也就能拿到密钥了,那加密等于加了个寂寞,如:
所以密钥也要进行密文传输,如果对密钥进行对称加密(这不就开始套娃了),此时就需要引入非对称加密
非对称加密
非对称加密需要用到两个密钥,一个是公钥
,一个是私钥
,公钥和私钥是配对的,此时就可以使用公钥加密,私钥解密(或者反过来)
服务端持有私钥,将公钥发送给客户端,客户端生成对称加密的密钥,使用公钥对这个密钥进行加密,黑客拿到了这个密文,由于没有私钥是不能进行解密的,也就不知道对称密钥是啥,也就不能获取到明文数据了,服务器通过私钥加密获取到客户端发送的对称密钥,通过这个密钥可以对返回客户端的响应数据加密,后续客户端和服务端的通信只需用对称加密即可,因为此时的密钥只有客户端和服务器知道,其他的网络设备不知道,截获数据也没有意义
那为啥不直接使用非对称加密,还需要用对称加密干啥?
因为非对称加密的开销远大于对称加密的开销,非对称加密只在传输密钥的时候使用,当双方都知道密钥是啥了,使用对称加密即可,没必要使用非对称加密浪费更大的开销
上述过程还存在一个问题,
中间人攻击
为了解决上述问题,需要引入证书
证书
为了解决上述“中间人攻击”问题,引入了第三方公信机构来证明这个公钥是可信的,客户端自身包含了一些公信机构信息(内置在操作系统中)
证书
就包含了公钥和网站的身份信息,这个证书就好比人的身份证,作为这个网站的身份标识,搭建一个 HTTPS 网站要在CA机构先申请一个证书(类似于去公安局办个身份证)
当客户端获取到这个证书会对证书进行校验,证书上有一些校验机制,如:
- 证书发布机构
- 证书有效期
- 公钥
- 证书所有者
- 签名
- …
通过校验证书就可以解决上述问题,于此也保证了数据传输的安全性
HTTPS执行流程总结
- 客户端使用HTTPS协议访问服务器
- 服务器返回证书,该证书包含了使用非对称加密的公钥
- 客户端校验证书是否有效,如果无效终止访问,如果有效:
a. 使用对称加密生成共享密钥
b. 使用共享密钥加密数据
c. 使用非对称加密的公钥加密共享密钥
d. 发送加密后的数据和共享密钥给服务器 - 服务器使用私钥解密出客户端使用对称加密的共享密钥,再使用共享密钥解密数据
- 之后客户端和服务器使用密钥对数据进行对称加密数据就可以进行交互