openssl_pkey_export і "не можна отримати ключ з параметра 1"

Мені потрібно використовувати openssl в моєму проекті PHP, тому я створив тестову сторінку PHP за допомогою openssl. Тим не менш, я продовжую отримувати ці помилки, і я не впевнений, чому. openssl включений.

Попередження: openssl_pkey_export() [function.openssl-pkey-export]: не може отримати ключ з параметра 1 у C: wamp www openslsample.index.php на лінії 18

     

Попередження: openssl_pkey_get_details() очікує, що параметр 1 буде ресурсом, boolean - C: wamp www openslsample index.php на рядку 21

<?php
 //echo phpinfo();

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

openssl_pkey_export($privateKey, $privkey,"123");

$pubkey=openssl_pkey_get_details($privateKey);
$pubkey=$pubkey["key"];
?>
2
Погляньте на наступне пояснення. Це може допомогти: stackoverflow.com/questions/16866994/& hellip;
додано Автор tabone, джерело

7 Відповіді

Це може допомогти, якщо ви перебуваєте у вікнах:

  1. Натисніть кнопку START
  2. Натисніть кнопку CONTROL PANEL
  3. Натисніть СИСТЕМА ТА БЕЗПЕКА
  4. Натисніть SYSTEM
  5. Натисніть ADVANCED SYSTEM SETTINGS
  6. Клацніть на ПЕРЕМІЩЕННЯ ЕКОЛОГІЇ
  7. У розділі "Системні змінні" натисніть "NEW"
  8. Введіть "Ім'я змінної" OPENSSL_CONF
  9. Введіть "Значення змінної". Мій - C: wamp bin apache Apache2.2.17 conf \ t
  10. Натисніть "ОК" і закрийте всі вікна та RESTART комп’ютер.

OPENSSL має правильно працювати.

8
додано

Це може допомогти, якщо ви перебуваєте у вікнах:

  1. Натисніть кнопку START
  2. Натисніть кнопку CONTROL PANEL
  3. Натисніть СИСТЕМА ТА БЕЗПЕКА
  4. Натисніть SYSTEM
  5. Натисніть ADVANCED SYSTEM SETTINGS
  6. Клацніть на ПЕРЕМІЩЕННЯ ЕКОЛОГІЇ
  7. У розділі "Системні змінні" натисніть "NEW"
  8. Введіть "Ім'я змінної" OPENSSL_CONF
  9. Введіть "Значення змінної". Мій - C: wamp bin apache Apache2.2.17 conf \ t
  10. Натисніть "ОК" і закрийте всі вікна та RESTART комп’ютер.

OPENSSL має правильно працювати.

8
додано

Перевірте openssl_error_string . Я думаю, що ваш файл openssl.cnf відсутній або щось.

Крім того, для створення ключів можна скористатися phpseclib, чистою реалізацією RSA . напр.

<?php
include('Crypt/RSA.php');

$rsa = new Crypt_RSA();

extract($rsa->createKey());

echo "$privatekey
$publickey"; ?>
0
додано

PHP повинен знайти ваш openssl.cnf. Найкращий спосіб досягти цього - додати розташування каталогу до нього в змінну середовища PATH.

0
додано

PHP повинен знайти ваш openssl.cnf. Найкращий спосіб досягти цього - додати розташування каталогу до нього в змінну середовища PATH.

0
додано

Я витягую з phpseclib , щоб виправити її в jose-jwt lib і це спрацювало, вам потрібні ці кілька змін:

<?php

$config = array();
$config['config'] = dirname(__FILE__) . '/openssl.cnf';

$privateKey = openssl_pkey_new(array(
  'private_key_bits' => 1024,
  'private_key_type' => OPENSSL_KEYTYPE_RSA,
) + $config);

openssl_pkey_export($privateKey, $privkey, "123", $config);

І цей мінімалістський конфігураційний файл:

# minimalist openssl.cnf file for use with phpseclib

HOME            = .
RANDFILE        = $ENV::HOME/.rnd

[ v3_ca ]

Викликається openssl.cnf . При всьому цьому вона повинна добре працювати.

0
додано

Я витягую з phpseclib , щоб виправити її в jose-jwt lib і це спрацювало, вам потрібні ці кілька змін:

<?php

$config = array();
$config['config'] = dirname(__FILE__) . '/openssl.cnf';

$privateKey = openssl_pkey_new(array(
  'private_key_bits' => 1024,
  'private_key_type' => OPENSSL_KEYTYPE_RSA,
) + $config);

openssl_pkey_export($privateKey, $privkey, "123", $config);

І цей мінімалістський конфігураційний файл:

# minimalist openssl.cnf file for use with phpseclib

HOME            = .
RANDFILE        = $ENV::HOME/.rnd

[ v3_ca ]

Викликається openssl.cnf . При всьому цьому вона повинна добре працювати.

0
додано
Ukrainian PHP comunity
Ukrainian PHP comunity
885 учасників

dev-ua/php