openssl_pkey_get_public не открытый публичный ключ, ошибка "no start line" - PullRequest
8 голосов
/ 01 сентября 2010

При создании открытого ключа и последующем его чтении с помощью функции openssl_pkey_get_public - $ publicKeyResource = bool (false) и сообщение: ошибка: 0906D06C: процедуры PEM: PEM_read_bio: нетСтартовая строка

$privateKey = openssl_pkey_new(array('private_key_bits' => 2048, 'private_key_type' => OPENSSL_KEYTYPE_RSA));

$keyDetails = openssl_pkey_get_details($privateKey);

$publicKeyResource = openssl_pkey_get_public($keyDetails['key']);

Что не так?

PS

privateKey = 

array(3) {
  ["bits"]=>int(2048)

  ["key"]=>
  string(451) "-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApo5lpSuSQmAOXfqAmexj
IzjdGnd1X1gCKj5ko2DHgcR4XBlj1hbFNs1pzXx+R/UvLXTeF7dNQ+9AgXjEeRa6
71VbNxrUgvb/PHjEANwce7xBsnbu+dcSazyNHzx4ahWyEF4f3HyaJkGrT/Dgzcut
DO+yFAH9u8Hx26cj/8kyrtIHxazemnD+IDHRa3zOjKDmTfoDRKtOMTPVgFAsYBXn
tKcLyamCSBgpwfQwKfUUcYhfY1xD9UMhVXabSSiNQOiTMuOIZUHueO8UCp/tdK6a
LprUDBQ/tVmiV7ZMeZYMjh6XnK7higJ3WZp8RmD4PPeKbtG6j2AuGpbF/ddzD62T
XwIDAQAB
-----END PUBLIC KEY-----
"

  ["type"]=>
  int(0)
}

Ответы [ 5 ]

5 голосов
/ 08 сентября 2010

Тот же ответ, который я дал в PHP + OpenSSL: ошибка возвращена, но правильный результат : Это, очевидно, вызвано openssl_pkey_get_public () , который хочет получить сертификат, содержащий ваш открытый ключ, а не открытый ключ сам по себе & ndash; Кажется, он загружает открытый ключ, но все равно вызывает эту ошибку. Подробнее см.

3 голосов
/ 01 сентября 2010

Возможно, вам будет проще с Cryp_RSA в phpseclib.например.

createKey (2048));echo $ publickey;?>

Подробнее:

http://phpseclib.sourceforge.net/

1 голос
/ 31 октября 2012

Скорее всего PHP openSSL отклоняет ключ в форме PEM. Попробуйте использовать форму RSA

0 голосов
/ 02 сентября 2010

Я подозреваю, что это должно быть ошибкой в ​​некоторых версиях PHP или OpenSSL, потому что ваш опубликованный код отлично работает для меня (с PHP 5.2.6 и OpenSSL 0.9.8g).

0 голосов
/ 01 сентября 2010

Причина:

Эта ошибка обычно вызывается одним поврежденным символом в начале файла .crt.Таким образом, есть вероятность, что у вас есть дополнительный пробел, дополнительный символ, дополнительная строка и т. Д. В файле сертификата SSL (.crt) или в ключе SSL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...