我目前正在构建一个应该处理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哈希值 生成派生的哈希值。
但我找不到。请帮我解决这个问题!