Меня интересует подписание 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?
Любые указатели, большие или малые, очень ценятся! Заранее спасибо,