谈谈数据传输中的安全性

迷思 2017-10-10

昨天写了一篇用户密码存储的安全性后,有读者留言询问关于如何保障客户端和服务端数据传输的安全性,这个话题在过去几年正好是我特别关注的一个点,所以我今天试着用我的经验来解答这个问题。

和密码存储一样,如果客户端的发出来Request通过明文传输是相当危险的,数据包一旦被中途截取到,通过常用的抓包软件,Charles或者Fiddler都能直接解析拿到客户端的请求数据,例如用户名密码之类。所以我们需要数据加密,包括走HTTPS协议。

数据加密的方式

对于数据传输加密,简单来看分为两类(实际上还有一类叫做单向加密,这里不展开):对称加密方式非对称加密方式

顾名思义,对于对称加密方式,发送方和接收方都使用同一个密钥对信息进行加密、解密。所以对称加密的优点和不足都是很明显的: 优点是对称加密方式速度很快,缺点是不同类型的通信端需要维护不同的密钥,同时由于客户端和服务端都需要保存密钥,所以密钥泄密的潜在可能性也更大。

非对称方式规定了密钥需要有一对儿一个公钥(Public Key)和一个私钥(Private Key/Security Key),如果用公钥加密信息,就需要用相同配对的私钥才能解密,反之亦然。非对称方式的特点是数据可靠性相当强,很大程度上保证了身份认证。

数字证书的作用

不过无论是对称或者非对称方式,都不具备防御中间人攻击的能力。当主机A和主机B通信时,即便他们中间插入了一个"转发"主机C, A、B都不会意识到,而继续以为它们之间是在直接通信。C可以不仅窃听A、B的通信还可以对信息进行篡改再传给对方,C便可以将恶意信息传递给A、B以达到自己的目的。

防止中间人攻击的方法实际上就是身份证认证方式,目前主流方式就是数字签名的方式,但是也是存在利用不对称信息、时间戳、生物信息、物理信息等其它成熟或者是不成熟,公开或不公开的解决方式。

数字证书是经过权威机构(CA)认证的公钥,通过查看数字证书,可以知道该证书是由那家权威机构签发的,证书使用人的信息,使用人的公钥。它有以下特点:

1、由专门的机构签发的数字证书才安全有效。

2、签发数字证书是收费的。

3、不会被冒充,安全可信。

4、数字证书有使用期限,过了使用期限,证书变为不可用。CA也可以在试用期内,对证书进行作废操作。

因此,在实际中数字证书+ RSA加密的办法来保障数据传输的安全性。

API访问改走HTTPS

上面提到的数字证书在现实中实施的实例就是HTTPS协议,所以除了代码层面上通过RSA加密,我们还会将API访问统一改走HTTPS协议,可以从根本上解决数据被篡改的可能性:

1. 避免运营商强插广告,甚至在正常结果前面插一条广告(天朝特色)
2. 手机客户端上被浏览器或者恶意软件篡改或者劫持
3. 阻止用户数据泄露

考虑到之前OpenSSL的滴血漏洞,数据传输的安全性绝不是一劳永逸的,需要时刻保持警惕。

扫描二维码或手动搜索微信公众号【架构栈】: ForestNotes

欢迎转载,带上以下二维码即可

谈谈数据传输中的安全性

相关推荐