Я пытаюсь использовать функцию OpenSSL для RSA-подписи / проверки в PHP ,
Когда я пытаюсь сделать openssl_verify
, используя мой открытый ключ, я получаю эту ошибку: ошибка: 0906D06C: процедуры PEM: PEM_read_bio: нет начальной строки
, но сама функция работает правильно (возвращает 0, если сообщения были изменены, и 1, если нетронутыми. openssl_sign
работает нормально.
Как это исправить?
В настоящее время я использую открытый ключ, сгенерированный openssl:
define("SC_MSG_PUBLIC", <<<EOD
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALjPcOckMHDVLiUstcRwwx8kF5PzsiEs
rskyndWisbXMLU9BHomXwL7Qg2L91jE+sNSobkzBDF41CbwDiNlofZUCAwEAAQ==
-----END PUBLIC KEY-----
EOD
);
Есть идеи, почему эта ошибка срабатывает, но все работает нормально?
Пытался сгенерировать открытый ключ из личного пространства и использовать его, но он выглядел точно так же, с тем же сообщением об ошибке: -S
$pkey = openssl_pkey_get_private(SC_MSG_PRIVATE);
$keyDetails = openssl_pkey_get_details($pkey);
file_put_contents('c:\publickey', $keyDetails['key']);
Также я попытался установить все новые версии (PHP 5.3.1, OpenSSL 1.0.0a) - тот же результат. И я на окнах.
Эта ошибка обычно возникает из-за одного поврежденного символа в начале файла .crt. Таким образом, есть вероятность, что у вас есть лишний пробел, лишний символ, лишняя строка и т. д. либо в файле сертификата SSL (.crt), либо в файле ключа SSL (.key).
.
define("SC_MSG_PUBLIC", "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALjPcOckMHDVLiUstcRwwx8kF5PzsiEsrskyndWisbXMLU9BHomXwL7Qg2L91jE+sNSobkzBDF41CbwDiNlofZUCAwEAAQ==");
Возможно, вам будет проще использовать phpseclib для создания/проверки подписи:
http://phpseclib.sourceforge.net/documentation/misc_crypt.html#misc_crypt_rsa_examples