В настоящее время я создаю веб-сервис, который должен обрабатывать голос Alexa. HTTP-запрос, который я получаю от Alexa, должен быть проверен путем проверки подписи, как описано в documentation (см. Ниже для отрывка).Проверка подписи запроса Alexa
Кажется, я правильно расшифровал подпись, отправленную в запросе, и, похоже, правильно вычислил подпись тела запроса. Но они различаются - но вместо того, чтобы быть совершенно другим (что намекает на некоторую ошибку при вычислении), вычисленная сигнатура является суффиксом отправленной подписи. Например:
Received подписи (декодируется и расшифрованного):
3021300906052b0e03021a05000414ca5cc3be233b045be79e94389e47353b7aaec434
Рассчитано подпись тела запроса (его sha1 хэш):
ca5cc3be233b045be79e94389e47353b7aaec434
Какие дополнительные байты в начале полученной подписи? Кажется, что они не изменяются между запросами.
Various информация:
- Ток (2016-10-29) certificate chain file
Оригинал получил подпись для вышеприведенного примера подписи:
M4Xq8WmUHjaR4Fgj9HUheoOUkZf4tkc5koBtkBq/nCmh4X6EiimBXWa7p+kHoMx9noTdytGSUREaxYofTne1CzYOW0wxb9x6Jhor6lMwHAr4cY+aR1AEOkWrjsP94bewRr1/CxYNl7kGcj4+QjbEa/7dL19BNmLiufMLZDdRFsZSzlfXpPaAspsoStqVc/qc26tj5R9wtB0sTS4wbFc4eyCPFaCZocq1gmjfR3YQXupuD7J3slrz54SxukNmL/M1CIoZ8lOXjS82XLkKjsrzXdY5ePk8XsEDjNWkFSLbqzBzGBqzWx4M913uDA6gPx5tFKeoP8FgpV+BHKDf3d4gmQ==
- Отрывок из Alexa documentation:
Проверка подписи Запроса
посылаемых Alexa предоставляют информацию, необходимую для проверки подписи в заголовках HTTP:
SignatureCertChainUrl
Signature
Подтвердить подлинность подписи:
Проверьте URL-адрес, указанный в заголовке SignatureCertChainUrl, в запросе, чтобы убедиться, что он соответствует формату, используемому Amazon. См. Проверка URL сертификата подписи.
Загрузить цепочку сертификатов X.509, закодированную в PEM-кодировке, которую Alexa использовала для подписывания сообщения, указанного в заголовке SignatureCertChainUrl в запросе.
Эта цепочка предоставляется во время выполнения, поэтому сертификат может периодически обновляться, поэтому ваш веб-сервис должен быть устойчивым к различным URL-адресам с различным контентом.
- Эта цепочка сертификатов состоит из (1) сертификата подписи Amazon и (2) одного или нескольких дополнительных сертификатов, которые создают цепочку доверия к сертификату центра сертификации (CA).Для подтверждения достоверности сертификата подписи, выполните следующие проверки:
- Сертификат подписи не истек (изучить как не раньше и не позже даты)
- Домен echo-api.amazon.com присутствует в разделе Subject Alternative Names (SANs) сертификата подписи
- Все сертификаты в цепочке объединяются, чтобы создать цепочку доверия к доверенному корневому сертификату CA
- После того, как вы определили, что подписывающий сертификат действителен , извлечь из него открытый ключ.
- Base64-декодировать значение заголовка подписи для запроса на получение зашифрованной подписи.
- Используйте открытый ключ, извлеченный из сертификата подписи, чтобы расшифровать зашифрованную подпись для получения утвержденных значений хэш-функции.
- Генерация SHA-1 хеш-значение из полного тела запроса HTTPS для получения выведенного значения хэш-
- Compare заявленная хэш-значение и полученные значения хэш-функции для того, чтобы они соответствовали