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

问题描述 投票:0回答:6

我需要在我的 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"];
?>
php openssl rsa
6个回答
36
投票

如果您使用的是 Windows,这可能会有所帮助:

  1. 点击开始按钮
  2. 点击控制面板
  3. 单击系统和安全
  4. 点击系统
  5. 单击高级系统设置
  6. 单击环境变量
  7. 在“系统变量”下单击“新建”
  8. 输入“变量名称”OPENSSL_CONF
  9. 输入“变量值”。

Wamp
-
C:\wamp\bin\apache\Apache2.2.17\conf\openssl.cnf

Xampp
-
C:\xampp\apache\conf\openssl.cnf

  1. 单击“确定”并关闭所有窗口并重新启动计算机。

OPENSSL 应正常工作。


1
投票

检查

openssl_error_string
。我的猜测是你的 openssl.cnf 文件丢失了或者什么的。

或者,您可以使用 phpseclib(一个纯 PHP RSA 实现)来生成密钥。例如。

<?php include('Crypt/RSA.php'); $rsa = new Crypt_RSA(); extract($rsa->createKey()); echo "$privatekey<br />$publickey"; ?>
    

1
投票
我从

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
投票
PHP 需要找到您的 openssl.cnf。实现此目的的最佳方法是将其目录位置添加到 PATH 环境变量中。


0
投票
您可以使用 ParagonIE\EasyRSA\KeyPair 来解决此问题。看看

https://github.com/paragonie/EasyRSA


0
投票
在 Windows 中,您可以按照以下步骤解决 openssl 问题:

    右键单击“我的电脑”图标
  1. 点击“属性”
  2. 点击“高级系统设置”
  3. 点击“环境变量”
  4. 在“系统变量”下单击“新建”
  5. 输入变量名称:OPENSSL_CONF”并 变量值(xampp 服务器):“D:\xampp pach
© www.soinside.com 2019 - 2024. All rights reserved.