openssl_pkey_export和“无法从参数1获取密钥”

时间:2013-06-24 10:03:44

标签: php openssl rsa

我需要在我的php项目中使用openssl,所以我使用openssl创建了一个测试php页面。但是,我不断收到这些错误,我不知道为什么。 openssl已启用。

  

警告:openssl_pkey_export()[function.openssl-pkey-export]:无法从第18行的C:\ wamp \ www \ opensslsample \ index.php中的参数1获取密钥

     

警告:openssl_pkey_get_details()要求参数1为资源,第21行的C:\ wamp \ www \ opensslsample \ index.php中给出布尔值

<?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"];
?>

6 个答案:

答案 0 :(得分:10)

如果你在Windows上,这可能会有所帮助:

  1. 点击“开始”按钮
  2. 点击控制面板
  3. 点击SYSTEM AND SECURITY
  4. 点击SYSTEM
  5. 点击ADVANCED SYSTEM SETTINGS
  6. 点击ENVIRONMENT VARIABLES
  7. 在“系统变量”下点击“新建”
  8. 输入“变量名称”OPENSSL_CONF
  9. 输入“变量值”。我是 - C:\ wamp \ bin \ apache \ Apache2.2.17 \ conf \ openssl.cnf
  10. 单击“确定”并关闭所有窗口并重新启动计算机。
  11. OPENSSL应该正常工作。

答案 1 :(得分:1)

检查openssl_error_string。我的猜测是你的openssl.cnf文件丢失了。

或者,您可以使用phpseclib, a pure PHP RSA implementation来生成密钥。例如

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

$rsa = new Crypt_RSA();

extract($rsa->createKey());

echo "$privatekey<br />$publickey";
?>

答案 2 :(得分:0)

PHP需要找到你的openssl.cnf。实现此目的的最佳方法是在PATH环境变量中添加它的目录位置。

答案 3 :(得分: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。有了这一切,它应该运作良好。

答案 4 :(得分:0)

您可以使用ParagonIE \ EasyRSA \ KeyPair解决此问题。看一下https://github.com/paragonie/EasyRSA

答案 5 :(得分:0)

  

警告:openssl_pkey_export():无法从57行的C:\ xampp \ htdocs \ info.php中的参数1获取密钥

     

警告:openssl_pkey_get_details()期望参数1为资源,在第60行的C:\ xampp \ htdocs \ info.php中给出布尔值