我有一个带有AMP的文章页面(在子域名上)。 现在我在一篇文章中做了一些修改。 如何重新加载此缓存的AMP(子)页?
正常版本: https://www.example.com/this-is-a-article-999
AMP-Version: https://amp.example.com/this-is-a-article-999
我执行以下步骤:
1。我在服务器上安装了openssl
2. 然后我生成了两个键
openssl genrsa 2048>私人key.pem
openssl rsa -in private-key.pem -pubout> public-key.pem
3. 我将公钥复制到子域(= AMP页面)并将其重命名为“apikey.pub”
因此可以通过浏览器访问公钥: https://amp.example.com/apikey.pub
4. 然后我创建了更新缓存请求,如下所示:
获取“date +%s”
的时间戳echo -n> url.txt'/update-cache/c/s/amp.example.com/this-is-a-article-999?amp_action=flush&_ts=1526997689'cat url .txt | openssl dgst -sha256 -sign private-key.pem> signature.bin
5. 我使用公钥来验证签名:
openssl dgst -sha256 -signature signature.bin -verify public-key.pem url.txt
我得到了followind错误: ==> 验证失败(!!!)
答案 0 :(得分:1)
在步骤3中,公钥的放置是错误的。正确的是:https://amp.example.com/.well-known/amphtml/apikey.pub
验证问题似乎在第4步,因为在单行上调用了2个命令并生成无效输出。
解决方案是将其分为两部分:
echo -n >url.txt '/update-cache/c/s/amp.example.com/this-is-a-article-999?amp_action=flush&_ts=1526997689'
cat url.txt | openssl dgst -sha256 -sign private-key.pem >signature.bin
或添加&两个命令之间:
echo -n > url.txt '/update-cache/c/s/amp.example.com/this-is-a-article-999?amp_action=flush&_ts=1526997689' & cat url.txt | openssl dgst -sha256 -sign private-key.pem > signature.bin
完整的序列就像这样:
openssl genrsa 2048 > private-key.pem
openssl rsa -in private-key.pem -pubout > public-key.pem
echo -n > url.txt '/update-cache/c/s/amp.example.com/this-is-a-article-999?amp_action=flush&_ts=1526997689'
cat url.txt | openssl dgst -sha256 -sign private-key.pem > signature.bin
openssl dgst -sha256 -signature signature.bin -verify public-key.pem url.txt
,输出如下:
openssl dgst -sha256 -signature signature.bin -verify public-key.pem url.txt
Verified OK
另外一件事是,在生成签名后,必须使用web-safe variant of Base64将其附加到amp_url_signature
参数的网址上。
最后,请务必查看文档的parameters部分,并根据AMP Cache URL Format生成网址。