前言
在学习 Http 协议的过程中,遇到一个我个人觉得很关键的问题,就是数据的加密解密,然后比较糊涂的先学了一点。懂了一些概念上的东西,先记录下来。
(注:本文只涉及一些基础概念上的东西,不涉及详细的算法)
对称加密算法
定义
一个密钥可以对数据进行加密,也可以对数据进行解密。例如将数据(二进制)的所有位数01颠倒,这样就得到了加密数据,然后接收到加密数据的一方,只需要再颠倒回来,即可以得到原始数据。
优点
对称加密算法通常比较简单,所以计算量小、加密速度快、加密效率高。
缺点
缺点也很明显,数据传输前,双方必须先商定好加密算法,然后才能进行加密解密。
而在互联网上,无法做到提前和对方商量好使用的加密算法,通过网络来“交流”是不行的,因为网络上的数据都是公开的,这不安全。别人可以抓取你和网站的交流来获取你们的加密算法以及密文,来获得数据,甚至可以拦截你的数据,然后修改你的数据,再发送给服务器,然后再把发送给你的数据修改后再发送给你(说远了,本文只说对称加密和非对称加密在Http协议中的使用)。
非对称加密
定义
非对称加密需要两个密钥(加密算法),一个是公有密钥,一个是私有密钥。公开密钥与私有密钥是一对,如果使用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果使用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法
使用
因为非加密算法在 http 协议(应该说 https )中的使用较为复杂,所以这里大致介绍一下。
首先,在 tcp 三次握手之后,再加上一步 SSL 四次握手。
- 客户端首先向服务器发起加密通信的请求,其中会附带上支持非对称加密方式
- 服务器会返回服务器支持的非对称加密方式并附带上公钥
- 客户端将双方后面使用的对称加密算法使用该公钥进行加密,然后发送给服务器
- 服务器告知客户端,之后的通信将使用双方协定好的对称加密进行通信
优点
因为公钥只能用私钥解开,而私钥只有服务器自己有,因此使用什么加密算法别人是无法获知的。这样就解决了上面需要事先商定使用什么对称加密算法的问题。
缺点
在第二步的时候,如果服务器下发的公钥被拦截然后替换了呢,然后这个拦截人作为你和服务器通信的中间人,你之后和服务器的通信就全部在中间人的掌控之中了。
为了解决这个问题,引入了 CA 机构。
CA 机构
CA是证书的签发机构,它是公钥基础设施(Public Key Infrastructure,PKI)的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。
CA 拥有一个证书(内含公钥和私钥)。网上的公众用户通过验证 CA 的签字从而信任 CA ,任何人都可以得到 CA 的证书(含公钥),用以验证它所签发的证书。
如果用户想得到一份属于自己的证书,他应先向 CA 提出申请。在 CA 判明申请者的身份后,便为他分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。
如果一个用户想鉴别另一个证书的真伪,他就用 CA 的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。证书实际是由证书签证机关(CA)签发的对用户的公钥的认证。
作用
只讲 CA 机构如何解决 SSL 第二次握手中的拦截问题,通俗易懂的来说,就是再给数据套上一层壳,防止有中间人拦截然后替换公钥。
网站向 CA 机构提交必要消息后,CA 机构会给网站颁发一个证书,这个证书就可以替代第二步里面的公钥传递。中间人可以使用使用CA的公钥(浏览器内置)来获取内容,但是这个内容是第二步的服务器公钥,获取了也没有,而他没有CA的私钥,无法替换内容(替换了无法加密)
这样就解决了第二步的问题
总结
以上只是一点点知识,不敢写太多,只写一些我觉得没多大问题的,因为了解还不是特别深,如果学更深了,会再写更深层次,继续努力吧。