Web系统安全架构—01防止数据被别人看见

客户端请求服务端时,如何防止自己传输的数据被看见?

可以将发送的数据进行加密。

1.0 版本加密

首先客户端向服务端请求获取密钥,获取到密钥之后,后面想要进行加密的数据就可以使用这个密钥进行加密后再传输,服务端拿到请求的数据之后也是通过相同的密钥进行解密,对于返回给客户端的数据也使用相同的密钥进行加密,客户端也是使用相同的密钥进行解密。
以上就是所谓的对称加密,也就是客户端和服务端对数据进行加密和解密的密钥是相同的。

存在的问题:这个密钥其它非法人员也是同样可以向服务端请求获取的,不安全。

2.0 加密

使用非对称加密,服务端有公钥和私钥,客户端向服务端请求获取到公钥,然后使用公钥对发送给服务端的数据进行加密,而服务端收到数据之后使用私钥进行解密,然后返回给客户端的数据使用私钥进行加密,而客户端使用公钥对响应的数据进行解密。
也就是:

  • 服务端:私钥解密,私钥加密
  • 客户端:公钥解密,公钥加密

    但是我们要知道,非对称加密相比对称加密效率是稍微低一点的,所以为了进一步提高效率,我们可以使用如下办法来进行中和。
    同时使用非对称加密和对称加密。
    (1)非对称加密来传输对称加密的密钥:客户端拿到公钥之后,可以自己随机生成一个字符串作为后面对称加密的密钥,然后使用公钥进行加密发送给服务端,服务端拿到数据之后使用私钥进行解密获取到密钥。
    (2)对称加密交流:服务端拿到客户端发送过来的密钥之后,后面合客户端所有的交流都使用这个密钥进行加密和解密。
    但是这种方案还是存在问题:

    (1)客户端向服务端发送请求被第三方截取,
    (2)第三方将请求转发给真正的服务端
    (3)第三方获取到服务端返回的公钥
    (4)第三方生成一个假的公钥返回的客户端
    此时客户端此时拿的是第三方给的公钥,后面使用这个公钥传输对称加密的密钥也会被第三方截取并拿到对称加密的密钥,然后第三方就可以对客户端后面的请求数据进行篡改,然后将篡改之后的数据发给服务端。
    问题根源在于:客户端发请求给服务端时,根本不知道这个服务端是不是合法的真正的服务端,所以需要一个机制来确定服务端是不是合法的真正的服务端。

    3.0 版本加密

    服务端需要一个东西来证明自己是合法的,真正的服务端。在现实生活中,比如你如何证明自己会开车呢?你得有驾驶证,如何证明自己结婚了呢?你得有结婚证......所以服务端需要证明自己是合法的,真正的服务端,需要得到另外一个权威的机构给其颁发的证书来证明自己是合法的——CA证书。
    CA是Certificate Authority的缩写,也叫“证书授权中心”,CA 证书,顾名思义,就是CA颁发的证书。
    证书的签发过程
    (1)服务端需要向CA机构提交的自己的公钥、组织信息、个人信息(域名)等信息并申请认证
    (2)CA 通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等,如信息审核通过,CA 会向申请者签发认证文件-证书。

  • 证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名;
  • 签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA 的私钥对信息摘要进行加密,密文即签名;

而浏览器自身就内置了CA的证书信息,浏览器首先对服务端发起请求,服务端返回证书,客户单读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA 的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法;

你可能感兴趣的:(httpshttp)