HTTPS如何防止重放攻击?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTPS如何防止重放攻击?相关的知识,希望对你有一定的参考价值。

参考技术A 客户端拼接字符串规则如下:

接口+参数+时间戳+secretID(如果不是做对外开放性的API,是内部产品调用的话那么secretID可以是写死的一个ID值)

将以上字符串用对称加密,作为一个sign参数,请求服务端。

比如接口,login,参数有 name、password、加密后的sign

服务端接收到请求后,用对称解密sign,得到secretID,核对值是否正确,那么说明请求方是可信任的。返回接口结果,并把sign记录到redis。

下次接收到同样请求时发现redis已经有对应的sign值说明是接口重放,不予以正常相应。因为正常用户调用接口时间戳应该是改变的不可能产生同样的sign值。

如果发现sign解释出来的secretID是系统不存在的,那么说明请求方在伪造请求。不予以正常相应。

感谢应邀回到本行业的问题。

在回答这个问题之前我感觉我们因该先了解一个HTTPS。

HTTPS :是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

HTTPS 协议的主要作用可以分为两种: 一种 是建立一个信息安全通道,来保证数据传输的安全; 另一种 就是确认网站的真实性。

工作流程 为:

第一步:客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。

第二步:Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。

第三步:客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。

第四步:客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。

第五步:Web服务器利用自己的私钥解密出会话密钥。

第六步:Web服务器利用会话密钥加密与客户端之间的通信。

从其工作流程中,我们看出每个连接都会验证证书,交换密钥。别人就算截获你的数据包,重新发送一遍,因为socket不一样,密钥也不一样,后台解密后应该是一对乱码才对。所以https本身就是防止重放攻击的。

欢迎您的关注和留言评论,您的关注和鼓励才是给我们最大的动力。

如何有效防止API的重放攻击(转自阿里云)



API重放攻击(Replay Attacks)又称重播攻击、回放攻击,这种攻击会不断恶意或欺诈性地重复一个有效的API请求。攻击者利用网络监听或者其他方式盗取API请求,进行一定的处理后,再把它重新发给认证服务器,是黑客常用的攻击方式之一。
HTTPS数据加密是否可以防止重放攻击?

否,加密可以有效防止明文数据被监听,但是却防止不了重放攻击。
使用签名防止重放攻击

使用签名之后,可以对请求的身份进行验证。但不同阻止重放攻击,即攻击者截获请求后,不对请求进行任何调整。直接使用截获的内容重新高频率发送请求。

API网关提供了一套有效防止重放攻击的方法。开启API网关的放重放,需要您使用“阿里云APP”的认证方式。通过这种签名认证方式,每个请求只能被使用一次,从而防止重放。

阿里云APP:是基于请求内容计算的数字签名,用于API网关识别用户身份。客户端调用API时,需要在请求中添加计算的签名。API网关在收到请求后会使用同样的方法计算签名,同用户计算的签名进行比较,相同则验证通过,不同则认证失败。这种认证的签名方式请参照:请求签名

在API网关的签名中,提供X-Ca-Timestamp、X-Ca-Nonce两个可选HEADER,客户端调用API时一起使用这两个参数,可以达到防止重放攻击的目的。
原理

    请求所有的内容都被加入签名计算,所以请求的任何修改,都会造成签名失败。

    不修改内容

        X-Ca-Timestamp:发起请求的时间,可以取自机器的本地实现。当API网关收到请求时,会校验这个参数的有效性,误差不超过15分钟。

        X-Ca-Nonce:这个是请求的唯一标识,一般使用UUID来标识。API网关收到这个参数后会校验这个参数的有效性,同样的值,15分钟智能被使用一次。




























以上是关于HTTPS如何防止重放攻击?的主要内容,如果未能解决你的问题,请参考以下文章

网络安全-重放攻击及其防御

重放攻击

API接口防止参数篡改和重放攻击

在 HTTP 连接中使用基于令牌的身份验证时如何防止重放攻击

如何防止 PHP、csrf、xsrf 中的表单重放/中间人攻击

API设计中防重放攻击