Проверка подписи запроса Alexa - PullRequest
0 голосов
/ 01 июня 2018

В настоящее время я создаю веб-сервис, который должен обрабатывать голосовые намерения Alexa.HTTP-запрос, который я получаю от Alexa, должен быть проверен путем проверки подписи, как описано в документации (отрывок см. Ниже).Различная информация: файл цепочки сертификатов: 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 Подпись Для проверки подписи:

Проверьте URL, указанный с помощьюзначение заголовка SignatureCertChainUrl в запросе, чтобы убедиться, что оно соответствует формату, используемому Amazon.См. Проверка URL сертификата подписи.Загрузите цепочку сертификатов X.509 в кодировке PEM, которую Alexa использовала для подписи сообщения, как указано в значении заголовка SignatureCertChainUrl в запросе.Эта цепочка предоставляется во время выполнения, поэтому сертификат может периодически обновляться, поэтому ваша веб-служба должна быть устойчивой к различным URL-адресам с различным содержанием.Эта цепочка сертификатов состоит, по порядку, из (1) сертификата подписи Amazon и (2) одного или нескольких дополнительных сертификатов, которые создают цепочку доверия к сертификату корневого центра сертификации (CA).Чтобы подтвердить действительность сертификата подписи, выполните следующие проверки: Срок действия сертификата подписи не истек (проверьте даты «Не до» и «Не после») Домен echo-api.amazon.com присутствует в альтернативных именах субъектов (SAN)раздел сертификата подписи Все сертификаты в цепочке объединяются для создания цепочки доверия к доверенному сертификату корневого ЦС. После того как вы определили, что сертификат подписи действителен, извлеките из него открытый ключ.Base64-декодирует значение заголовка Signature по запросу для получения зашифрованной подписи.Используйте открытый ключ, извлеченный из сертификата подписи, чтобы расшифровать зашифрованную подпись, чтобы получить заявленное значение хеш-функции.Сгенерируйте хеш-значение SHA-1 из полного тела запроса HTTPS, чтобы получить производное хеш-значение. Сравните заявленное хеш-значение и производные хеш-значения, чтобы убедиться, что они совпадают

Затем я использовал метод проверки в классеSkillRequestSignatureVerifier предоставлено Alexa SDK, но это не сработало.Какой способ декодирования я должен использовать, чтобы понять, что он говорит:

Используйте открытый ключ, извлеченный из сертификата подписи, чтобы расшифровать зашифрованную подпись, чтобы получить заявленное значение хеш-функции.

И он говорит:

Генерация хеш-значения SHA-1 из полного тела запроса HTTPS для получения производного хеш-значения.

Но я его не нахожу,Пожалуйста, помогите мне решить эту проблему!

...