【问题标题】:WAMP is unable to generate private key when using OpenSSL使用 OpenSSL 时 WAMP 无法生成私钥
【发布时间】:2016-07-03 06:48:26
【问题描述】:

我正在 Windows 8.1 中开发 OpenSSL,Wamp Apache 版本:2.4.9 PHP 版本:5.5.12。最后我遇到了以下错误:

我的 PHP 代码如下所示。 WAMP 无法生成私钥。

$privateKey = openssl_pkey_new(array(
    'private_key_bits' => 384,      // Size of Key.
    'private_key_type' => OPENSSL_KEYTYPE_RSA,
));

openssl_pkey_export($privateKey, $privKey, null, ['config' =>   'C:/wamp/bin/apache/apache2.4.9/conf/openssl.cnf']);
$a_key = openssl_pkey_get_details($privateKey);

file_put_contents('keys/'.$username.'_public.key', $a_key['key']);
file_put_contents('keys/'.$username.'_private.key', $privKey);
openssl_free_key($privateKey);

谁能帮我在 Windows 中运行 OpenSSL。 提前致谢。

【问题讨论】:

  • Windows 上的一些 OpenSSL 故障与 .rnd 文件和保存其状态有关。例如,请参阅How to fix “unable to write 'random state' ” in openssl
  • 您要修复的错误究竟是什么?随着人们帮助您解决问题,问题似乎正在发生变化。
  • @jww 我无法在 wamp 中使用 openssl 生成公钥和私钥。现在解决了。下面的答案解决了这个问题。

标签: php openssl wamp


【解决方案1】:

我遇到了类似的问题,我发现 WAMPserver 没有安装默认 CA。如何解决:

还要确保将OPENSSL_CONF 环境变量设置为c:\wamp\bin\apache\apache2.4.9\conf\openssl.cnf

【讨论】:

    【解决方案2】:

    您的问题并不具体,但我可以说您使用错误的第四个参数调用openssl_pkey_export。它应该是带有config 键的数组,而不仅仅是字符串。 config 也需要 openssl_pkey_new 密钥。

    <?php
    
    $privateKey = openssl_pkey_new([
        'private_key_bits' => 384,
        'private_key_type' => OPENSSL_KEYTYPE_RSA,
        'config' => 'C:/wamp/bin/apache/apache2.4.9/conf/openssl.cnf'
    ]);
    
    openssl_pkey_export($privateKey, $privKey, null, [
        'config' => 'C:/wamp/bin/apache/apache2.4.9/conf/openssl.cnf'
    ]);
    
    $a_key = openssl_pkey_get_details($privateKey);
    
    var_dump($privKey); // Just to test output
    
    file_put_contents('keys/'.$username.'_public.key', $a_key['key']);
    file_put_contents('keys/'.$username.'_private.key', $privKey);
    
    openssl_free_key($privateKey);
    

    希望对你有帮助

    【讨论】:

    • 您好,感谢您抽出宝贵时间来帮助我。我尝试了上面给出的代码。它仍然会产生相同的警告。警告:openssl_pkey_export(): cannot get key from parameter 1
    • 其他错误与第一个错误有关。一旦这个问题得到解决,这些都不是问题。
    • 不,它不会产生相同的警告。原始警告是... expects parameter 4 to be array ...。解决了。现在,$privateKey 变量的内容有问题(警告... cannot get key from parameter 1 ...)。正如我所说,如果没有完整的源代码,我无法为您提供更多帮助。
    • 问题太多了。两件事 - 私钥是 PEM 格式。那时页眉和页脚有效。你确定它真的每次都生成相同的密钥吗?我编辑了我的答案以反映您更新的问题。
    • 好吧,我不知道该说什么了。每次如果我在我的系统(Windows 7、PHP 5.5.28)上运行最终版本的脚本,PEM 格式的私钥就不一样了。我在脚本中间通过var_dump 检查输出。如果您认为这是另一个问题,您可以创建一个新问题。
    猜你喜欢
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 2011-08-21
    • 1970-01-01
    • 2019-08-15
    • 2012-04-05
    • 2016-09-15
    相关资源
    最近更新 更多