Подписание URL-адресов с помощью HMAC или OpenSSL

Меня интересует подпись URL (например, http: //.../? Somearg = value & anotherarg = anothervalue & sig = aSKS9F3KL5xc ), но у меня есть несколько требований которые оставили меня без решения.

  • Я буду использовать либо PHP , либо Python для страниц, поэтому мне нужно будет подписать и проверить подпись используя один из двух.
  • Мой план состоял в том, чтобы использовать схему ключей priv / pub для подписи некоторых данных и иметь возможность проверить, что подпись действительна, но здесь это усложняется:
  • Данные не известно, когда происходит проверка (это не просто somearg = value & anotherarg = anothervalue )

Моим первым побуждением было использовать OpenSSL, например с парой ключей RSA, чтобы сделать что-то вроде подписи: openssl rsautl -sign -inkey private.pem -in sensitive -out privsigned и проверки на основе данных privsigned и ТОЛЬКО ключ: openssl rsautl -verify -inkey public.pem -in privsigned -pubin .

Использование PHP openssl_get_privatekey () и openssl_sign () подписывает данные в порядке, но мне нужно знать (расшифрованные!) данные, чтобы проверить (чего у меня не будет): openssl_get_publickey () и openssl_verify ($ data, $ signature, $ pubkeyid ); из http://php.net/openssl_verify .

Или мне что-то здесь не хватает?


Итак, я заглянул в HMAC, но хотя многие хэш-функции доступны в обоих Python и PHP , я не понимаю, как бы я проверил хэш. PHP hash_hmac () позволяет мне создавать хеш с использованием «ключа» (или, в данном случае, строкового ключа). Но как мне проверить, что хеш действителен (например, & sig = не только что был вручную введен конечным пользователем & sig = abcdefg1234 .

Итак, чтобы подвести итог вверх (извините за длинный вопрос): Как я могу проверить, что подпись / хеш была сделана ключом моего сервера (сертификат / строка) (учитывая, что я не могу проверить, переделав хеш указанных данных)? И есть ли у вас какие-либо предпочтения относительно того, какой маршрут я должен выбрать, Priv / pub-key или HMAC?

Приветствуются любые указатели, большие или маленькие! Заранее спасибо,

  • Джош

8
задан Josh 10 August 2011 в 12:30
поделиться