6

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

警告:openssl_pkey_export() [function.openssl-pkey-export]: cannot get key from parameter 1 in C:\wamp\www\opensslsample\index.php 第 18 行

警告: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"];
?>
4

5 回答 5

23

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

  1. 点击开始按钮
  2. 点击控制面板
  3. 点击系统和安全
  4. 点击系统
  5. 点击高级系统设置
  6. 点击环境变量
  7. 在“系统变量”下单击“新建”
  8. 输入“变量名”OPENSSL_CONF
  9. 输入“变量值”。我的是 - C:\wamp\bin\apache\Apache2.2.17\conf\openssl.cnf
  10. 单击“确定”并关闭所有窗口并重新启动计算机。

OPENSSL 应该可以正常工作。

于 2013-09-18T10:25:23.143 回答
1

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

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

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

$rsa = new Crypt_RSA();

extract($rsa->createKey());

echo "$privatekey<br />$publickey";
?>
于 2013-06-24T15:18:51.403 回答
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。有了这一切,它应该运作良好。

于 2018-05-09T15:35:51.247 回答
0

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

于 2017-08-11T18:47:16.293 回答
0

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

于 2019-01-04T16:39:05.347 回答