我需要在我的 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"];
?>
如果您使用的是 Windows,这可能会有所帮助:
Wamp
- C:\wamp\bin\apache\Apache2.2.17\conf\openssl.cnf
Xampp
- C:\xampp\apache\conf\openssl.cnf
OPENSSL 应正常工作。
检查
openssl_error_string
。我的猜测是你的 openssl.cnf 文件丢失了或者什么的。
或者,您可以使用 phpseclib(一个纯 PHP RSA 实现)来生成密钥。例如。
<?php
include('Crypt/RSA.php');
$rsa = new Crypt_RSA();
extract($rsa->createKey());
echo "$privatekey<br />$publickey";
?>
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
。有了这一切,它应该可以很好地工作。
https://github.com/paragonie/EasyRSA。