验证Alexa请求的签名

时间:2018-06-01 09:34:19

标签: signature alexa verification alexa-skill

我目前正在构建一个应该处理Alexa语音意图的网络服务。我从Alexa获得的HTTP请求必须通过检查签名来验证,如文档中所述(参见下面的摘录)。 各种信息:     证书链文件:https://s3.amazonaws.com/echo.api/echo-api-cert-5.pem     原始收到的上述示例签名的签名:

LqhhuCKwBRVucGS1MHS2yf3jKMmpm10cuImDnK0bC8lQHLfCbMukdHhvulWH4SAypXqgAk3y81G0CRS4NIG+oLnTB3PfeHb70yS8WdSFflKd/NlTc/2Rr1c5pCdpZ9C1LtNmsa/pSafTbSt4RDhmQ8XtKVCw6twhTsebS6om6/ggom95z3m1Zi4k4SkLKRQGvq18+sJHcsADKHrLO735FQ3CNrIVfS76UMXkROlJ9oSEBa9KpqSONffdVe7DDBGTGF4CLjfoSDDBjQ1nCQ0THxljUdTZ2kp4cYn1qkXJfCPoLB2+75O6Cndf+BMP9+gWd20Rl5GV44KLY9ezwEmYpA==

摘自Alexa文档:

  

检查请求的签名

     

Alexa发送的请求提供验证所需的信息   HTTP标头中的签名:

     

SignatureCertChainUrl签名验证签名:

     

验证SignatureCertChainUrl标头值指定的URL   请求以确保它与亚马逊使用的格式相匹配。看到   验证签名证书URL。下载PEM编码   Alexa用于将消息签名为的X.509证书链   由请求上的SignatureCertChainUrl标头值指定。   此链在运行时提供,以便证书可以   定期更新,因此您的Web服务应该具有弹性   具有不同内容的不同URL。这个证书链是   按顺序组成,(1)亚马逊签署证书和(2)一个   或更多其他证书,以创建对根的信任链   证书颁发机构(CA)证书。确认的有效性   签署证书,执行以下检查:签名   证书尚未过期(同时检查Not Before和Not After   日期)域名echo-api.amazon.com出现在主题中   签名证书All的备用名称(SAN)部分   链中的证书组合起来创建一个信任链   受信任的根CA证书确定签名后   证书有效,从中提取公钥。 Base64编码解码   请求获取加密的Signature标头值   签名。使用从签名证书中提取的公钥   解密加密的签名以产生断言的散列值。   从完整的HTTPS请求主体生成SHA-1哈希值   产生派生的哈希值比较断言的哈希值和   派生哈希值以确保它们匹配

然后我使用了Alexa SDK提供的类SkillRequestSignatureVerifier中的验证方法,但它没有用。 我应该使用哪种解码方式来实现它所说的内容:

  

使用从签名证书中提取的公钥进行解密   加密签名以产生声明的哈希值。

他说:

  

从完整的HTTPS请求正文生成SHA-1哈希值   生成派生的哈希值。

但我找不到。请帮我解决这个问题!

0 个答案:

没有答案