2016-10-29 6 views
2

В настоящее время я создаю веб-сервис, который должен обрабатывать голос 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 предоставляют информацию, необходимую для проверки подписи в заголовках 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 заявленная хэш-значение и полученные значения хэш-функции для того, чтобы они соответствовали

ответ

0

По googeling для префикс 3021300906052b0e03021a05000414 из полученной подписи Я узнал, что the prefix is a constant that indicates the used hash algorithm. Либо просто отключить его, либо позволить OpenSSL выполнить проверку подписи, решает проблему. Никогда не варите свой собственный крипто!

 Смежные вопросы

  • Нет связанных вопросов^_^