You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何刷新AMP缓存?签名验证失败问题求助

解决AMP缓存刷新签名验证失败的问题

看起来你在手动刷新AMP缓存时遇到了签名验证失败的问题,我帮你一步步排查可能的错误点,以及对应的修复方法:

1. 修正url.txt的生成命令

你的第一步错误出在生成URL文件的命令上:

echo -n >url.txt '/update-cache/c/s/amp.example.com/this-is-a-article-999?amp_action=flush&amp_ts=1526997689'

这个命令会先清空url.txt,但后面的URL字符串并没有被写入文件(因为重定向符号>放在了echo -n和文件名之间),导致url.txt是空的,签名自然无效。

正确写法:

echo -n '/update-cache/c/s/amp.example.com/this-is-a-article-999?amp_action=flush&amp_ts=1526997689' > url.txt

生成后可以用cat -A url.txt检查内容,确保没有多余的换行符(结尾没有$标记,因为echo -n不会自动添加换行),也没有空格或其他无关字符。

2. 重新生成签名并验证

确保url.txt内容正确后,重新执行签名命令:

cat url.txt | openssl dgst -sha256 -sign private-key.pem >signature.bin

然后用正确的参数顺序执行验证(虽然你的原命令顺序没问题,但明确参数顺序能避免潜在问题):

openssl dgst -sha256 -verify public-key.pem -signature signature.bin url.txt

3. 确认密钥对配对正确

有时候密钥对生成过程中可能出现意外,建议重新生成一次密钥对,确保公钥和私钥完全匹配:

# 重新生成私钥
openssl genrsa 2048 > private-key.pem
# 从私钥导出公钥
openssl rsa -in private-key.pem -pubout > public-key.pem

然后把新生成的public-key.pem内容完整复制到AMP子域名下的apikey.pub文件中,确保浏览器访问时能看到完整的公钥内容(没有截断或格式错误)。

4. 检查时间戳的有效性

虽然这不会导致本地验证失败,但后续实际刷新请求会失败:amp_ts必须是当前的10位Unix时间戳,与当前时间差不能超过1小时。用date +%s获取最新时间戳替换到URL中。

5. 测试实际刷新请求

如果本地验证通过后,你可以把签名转成base64格式,构造实际的刷新URL测试:

# 将签名转成无换行的base64格式
base64 signature.bin | tr -d '\n' > signature.base64

然后访问:

https://amp.example.com/update-cache/c/s/amp.example.com/this-is-a-article-999?amp_action=flush&amp_ts=最新时间戳&amp_signature=刚才生成的base64内容

如果返回200状态码,说明缓存刷新成功;如果返回4xx错误,再回到前面的步骤排查URL格式或密钥问题。

内容的提问来源于stack exchange,提问作者Martin Hörmann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:37:51