当前位置: 首页 > 知识库问答 >
问题:

签名过期:现在早于错误:InvalidSignatureException

公孙国兴
2023-03-14

我正在尝试一个带有AWS API网关和I am授权的小例子。AWS API网关生成了以下endpoint:

https://xyz1234.execute-api.us-east-2.amazonaws.com/Users/users

带POST操作且不带参数。

最初,我关闭了这个POST方法的IAM,并使用Postman来验证结果。然后,我创建了一个新的IAM用户,并将AmazonAPIGatewayInvokeFullAccess策略附加到该用户,从而允许调用任何API。为POST方法启用了IAM。

然后,我转到Postman——添加了带有AccessKey、Secret Key、AWS区域为< code>us-east-2和服务名为< code>execute-api的授权,并尝试执行请求,但我得到了InvalidSignatureException错误,返回代码为403。

正文包含以下消息

Signature expired: 20170517T062414Z is now earlier than 20170517T062840Z (20170517T063340Z - 5 min.)" 

我错过了什么?

共有3个答案

轩辕阳焱
2023-03-14

当我使用timedatectl命令更改底层计算机的日期时间时,遇到了类似的问题...MikeD给出的解释

sudo apt install ntp
sudo apt install ntpdate
sudo ntpdate ntp.ubuntu.com

将时间与正确的当前日期时间同步后,此问题将得到解决

劳烨
2023-03-14

您需要将机器的本地时钟与NTP同步。

例如。在ubuntu机器上:

sudo ntpdate pool.ntp.org

系统时间经常不同步。您需要定期保持它们的同步。

您可以运行每日 CRON 作业以保持系统时间同步,如以下链接所述:在 Linux 中定期同步时间

创建一个名为ntpdate的bash脚本来同步时间,并将下面的html" target="_blank">代码放入其中

#!/bin/sh
# sync server time
/usr/sbin/ntpdate pool.ntp.org >> /tmp/ntpdate.log

您可以将该脚本放在您喜欢的任何地方,然后设置一个cron。我将把它放在每日cron目录中,以便它每天运行一次,因此我的ntpdate脚本现在位于/etc/cron.daily/ntpdate中,它将每天运行

使此脚本可执行

chmod +x /etc/cron.daily/ntpdate

通过运行一次脚本进行测试,并在/tmp/ntpdate.log中查找一些输出

/etc/cron.daily/ntpdate

在您的日志文件中,您应该会看到类似的内容

26 Aug 12:19:06 ntpdate[2191]: adjust time server 206.108.0.131 offset 0.272120 sec
归鸿朗
2023-03-14

使用AWS sigV4签名的请求包含创建签名的时间戳。签名仅在创建后的短时间内有效。(这限制了尝试重放攻击的时间。)

验证签名时,会将时间戳与当前时间进行比较。如果这表明签名不是最近创建的,则签名验证失败并出现您提到的错误消息。

如果你在Windows上使用WSL的Docker容器中得到这个,那么通过在Powershell中运行wsl -d docker-desktop -e /sbin/hwclock -s来修复WSL时间可能会有所帮助。您可以通过登录到容器并在终端中键入日期并将其与主机时间进行比较来验证是否属于这种情况。

出现这种情况的一个常见原因是生成签名的主机上的本地时钟偏差超过几分钟。

 类似资料:
  • 我正试图基于封送的xml和xslt以及一些问题生成outFile。 这段代码从对象生成xml流。 此方法生成以xml作为输入的输出文件 运行代码时,我得到TransformerExcema: 输入xml和xslt都会在在线工具中产生预期的输出-http://www.utilities-online.info/xsltransformation. 这段代码在控制台中提供了正确的xml文件。 在这个问

  • 我正在尝试从外部远程服务对文档进行签名。签署过程分两个阶段进行。远程服务在第一阶段期待base64编码的散列,并在身份验证后发出令牌。在第二阶段,我们将使用接收到的令牌再次传递相同的散列并获得base64签名的散列。我在这里附上签名错误的文件。文件 如果有人可以分析它并指导我评估无效签名背后的原因。我正在使用执行与pdf相关的操作。 更新 根据反馈,我做了一些更正。文档现在正在更改。已更改的文档

  • 我遵循了关于这个问题的说明https://github.com/aws/aws-sdk-go/issues/467,其中清楚地记录了如何为PUT请求创建预签名的url。目标是预置url,这样我就可以安全地直接从浏览器上传图像

  • 问题内容: 天是用户输入以获得比(用户输入的天数)还早的结果的数字。例如,如果用户输入32天,则他们将获得30天之前的结果。 快速试用: 我的问题和尝试 来自输入字段的输入 在我的情况下,在Django中执行此操作的最佳方法是什么? 问题答案: 这样的事情将为你工作:

  • 问题内容: 我试图将我的apk上传到Google Play上,并遇到错误消息:“您上传了可调试的APK。出于安全原因,您需要先禁用调试,然后才能在Google Play中发布。了解有关可调试的APK的更多信息。” 然后我在清单中写信,然后再试一次。我遇到了相同的错误,因此我将模块的build变量设置为release,并尝试再次生成apk,但是这次生成了此错误: 问题答案: 我不建议您关闭皮棉检查,