<?php
$config = array(
'private_key_bits' => 2048,
);
$res = openssl_pkey_new($config);
$res返回false的时候,检查发现,是window系统缺少了openssl环境变量,解决方法如下:
$opensslConfigPath = "D:/phpStudy/Apache/conf/openssl.cnf"; //apache路径下的openssl.conf文件路径
$config = array(
'private_key_bits' => 2048,
);
$res = openssl_pkey_new($config);
if(!$res) {
$config['config'] = $opensslConfigPath;
$res = openssl_pkey_new($config);
}
此外,如果打算使用密钥生成和证书签名功能,你需要在你的系统上安装一个可用的 openssl.cnf 文件。 在我们的 win32 二进制发行版本中,我们已经包含了一个示例配置文件,在 extras/openssl 文件夹中。
PHP 将会使用如下逻辑搜索 openssl.cnf 文件:
- 如果
OPENSSL_CONF
环境变量设置了,该变量将会被当作配置文件的路径(含文件名)。 - 如果
SSLEAY_CONF
环境变量设置了,该变量将会被当作配置文件的路径(含文件名)。 - 假设openssl.cnf 文件将会在 openssl DLL 被编译时配置的默认证书区域被找到。这通常意味着默认的文件名是 C:\Program Files\Common Files\SSL\openssl.cnf(x64) 或者 C:\Program Files (x86)\Common Files\SSL\openssl.cnf (x86),而 PHP 7.4.0之前,则是 C:\usr\local\ssl\openssl.cnf。
在你的安装过程中,你需要决定是否将配置文件安装在默认路径或者使用环境变量(可能是基于每个虚拟主机的基础)来定位配置文件安装到其他地方。注意,可以使用引入配置文件的函数中的 options
参数来覆盖脚本中的默认路径。