常见数据加密方式及HTTPS相关概念

相信大多数WEB工程师开发时都会考虑到数据在网络上传输的安全性,肯定也涉及到加密的一些方式,如果我们想要做一个有支付平台的网站,安全性肯定处于首位,下面我将谈下自己对数据加密这块的理解。

数据加密方式

我学习到的常见数据加密方式共三种,分别是散列、对称加密、非对成加密,严格的来说散列(摘要算法)只能用于认证。

散列通过对要传输的数据进行HASH计算以混淆数据达到数据传输的安全,散列的长度越长安全性越高,但是性能也越差,散列还可以通过在待传输数据后面加盐值(额外的字符串)进一步提高安全性,散列的弊端就是客户端对数据加密进行传输后,服务端只能进行验证数据是否完整,不能进行解密

对称加密,指服务端和客户端预先规定好一个密钥,客户端将请求的数据经密钥加密后送达服务端,服务端负责解密数据,这种对称加密的方式不能保证密钥的安全性(即服务端通过网络将密钥传递给客户端时也可能会被中间人劫持)。

非对称加密有一对密钥,公钥/私钥,服务端通过私钥生成公钥,然后将公钥传递给客户端,保证了私钥不会被其他人获取到,客户端将数据通过公钥加密后传输,服务端通过私钥解密保证了数据的安全性,弊端是网络存在中间人截获服务端发送的数据可以篡改数据

在说HTTPS之前要了解一个概念,非对称加密不光有公钥加密私钥解密的思想,还有私钥加密公钥验证的用法。具体的就是,服务端用私钥将待发送的数据加密(私钥加密后的数据叫做数字签名),客户端通过公钥进行反解密,这个传输的数据通过散列得到摘要,服务端同时将摘要和数字签名发送至客户端,客户端公钥验证后通过同样的摘要算法比对服务端传过来的摘要,比对成功即验证服务端成功,并且同时保证了数据的完整性。

HTTPS

HTTPS由HTTP协议加上SSL(Secure Socket Layer)安全套接层,TLS作为SSL的一个标准化存在也可以用作安全套接层。HTTPS由最初的HTTP协议发展而来,HTTP协议在网络上是明文传输的不能保证数据的安全性,而HTTPS通过在HTTP与TCP之间添加一层安全套接层来保证数据传输的安全性。

HTTPS能够保障三个方面:

  1. 数据安全性(加密)
  2. 数据完整性
  3. 服务端正确(认证)

HTTPS加密的流程,

  1. 客户端(通常是浏览器)发起数据请求,服务端将其证书传输给客户端
  2. 客户端检验自己的根证书是否匹配服务端证书,匹配则执行下一步
  3. 客户端用跟服务端一样的散列算法计算待发送数据的摘要,客户端使用对称算法将摘要加密一次,客户端使用证书内的公钥加密对称算法的密钥,客户端发送摘要、对称加密后的数据、非对称加密后的密钥。
  4. 服务端接收到数据,通过自己的私钥解密客户端传来的密钥,接着用密钥解密数据,然后使用散列算法计算一次数据,如果跟客户端发送的摘要一样,服务端响应这次请求,否则拒绝这次请求。

看到这里,读者可能有点迷惑了,怎么突然冒出来一个证书,那么证书到底是什么东西呢?

其实证书就是经过包装后的公钥,证书可以由自己进行派发(通常会需要浏览器自行选择安装证书),也可以由比较权威的证书发放中心发放。

如果自己需要申请证书,首先需要自己提供一个公钥以及其他譬如公司信息、公司名称等。然后认证中心会发放证书,并且该证书在浏览器端也得到信任。

证书说白了就是一个认证的机制,通常我们只需要认证网站的提供者即可,比如说我们访问淘宝网站,你要在网站上面消费,你怎么保证该网站是真的淘宝网站,这个时候就需要我们的证书进行认证了,这里也体现出证书的发放者必须具有公认的权威性,然后你自己的浏览器会对淘宝网的证书进行认证,认证通过就可以愉快的购物了。

通过HTTPS认证后的网站,在每次数据传输时都保证了在安全的SSL通道上面进行传输,如果想要增加额外的加密操作也可以,不过我感觉HTTPS加密考虑的已经够彻底了,对于一般的网站也没有太大的必要进行其他安全方面的控制。

证书链,网站服务提供者申请的证书并不是简单的一级证书,还包括中间证书以及根证书,我们通过中间证书保证了用户实际使用的证书(user-cert)是合法的,通过根证书保证提供user-cert的中间证书提供者是合法的,根证书颁发机构实则是真正颁发证书。

证书链给我的感觉和域名层级差不多,都是通过层层把控来保证最终的申请者的合法性。

你可能感兴趣的:(常见数据加密方式及HTTPS相关概念)