Как проверить цифровую подпись с openssl - PullRequest
4 голосов
/ 28 мая 2010

Я использую стороннюю службу обработки кредитных карт (Paybox), которая после успешной транзакции перенаправляет обратно на веб-сайт с подписью в URL-адресе в качестве меры безопасности, чтобы запретить людям манипулировать данными. Это должно доказать, что запрос произошел от этого сервиса. Так что мой URL успеха выглядит примерно так:

/ success.php? Signature = [ОГРОМНЫЙ ХАШ]

Понятия не имею, с чего начать проверку этой подписи. Этот сервис предоставляет открытый ключ, и я предполагаю, что мне нужно создать закрытый ключ, но я не знаю многого из этого.

Я очень хорошо разбираюсь в linux и знаю, что мне придется запускать некоторые команды openssl. Я пишу скрипт проверки на PHP, который также имеет встроенные функции openssl ().

Если бы кто-нибудь мог, пожалуйста, подтолкнуть меня в правильном направлении с помощью некоторого псевдокода или даже функционального кода, я был бы очень благодарен. Спасибо.

Ответы [ 3 ]

5 голосов
/ 20 сентября 2016

Это мой код, и он работает для меня. Надеюсь, я смогу вам помочь.

$sign = "28E5FA795590066E8402B529DB027B8D082A226BE6E53F80D41F763207A11EF9..."; // inline signature. I'm using SHA512
$cert = "your certification"; // ------BEGIN..... END..----
$data = "text"; // 64 charactor for SHA512. It's raw data, not hashed data
$pubkeyid = openssl_pkey_get_public($cert);
$ok = openssl_verify($data, hex2bin($sign), $pubkeyid,OPENSSL_ALGO_SHA512);
if($ok==1) return "Verify"; else return "Unverify";
1 голос
/ 11 ноября 2011

Вы можете использовать openssl_verify (), следующий пример от Stiv @ php.net

<?php
// $data is assumed to contain the data to be signed

// fetch certificate from file and ready it
$fp = fopen("path/file.pem", "r");
$cert = fread($fp, 8192);
fclose($fp);

// state whether signature is okay or not
// use the certificate, not the public key
$ok = openssl_verify($data, $signature, $cert);
if ($ok == 1) {
    echo "good";
} elseif ($ok == 0) {
    echo "bad";
} else {
    echo "ugly, error checking signature";
}
?>

Подробнее о openssl_verify () здесь: http://nl.php.net/openssl_verify

Paybox также имеетzip-файл доступен для скачивания на их сайте "Пояснения и образцы для проверки цифровой подписи с помощью PAYBOX SYSTEM"

http://www1.paybox.com/telechargement_focus.aspx?cat=3

1 голос
/ 28 мая 2010

Вам не понадобится закрытый ключ. Подпись сделана с помощью закрытого ключа Paybox, поэтому вам понадобятся только their public key, data they've signed и signature. Проверьте их документацию, чтобы увидеть, какую часть данных они подписали.

Руководство по PHP содержит полный пример документации openssl_verify .

...