生成SHA256 CSRs PHP Openssl
我也在尝试使用PHP开发某种PKI管理,我发现使用PHP Openssl存在许多问题(部分到期文档) 例如,我通过硬方法(try and error)了解到PHP openssl并没有真正检查openssl_CONF环境变量,使用不同配置文件的唯一真正方法是使用$configArray('config'=>file_path)参数 目前,我一直在尝试使用SHA256哈希方法生成CSR。对于测试,我使用了这个最小(但有效)的openssl.conf配置:生成SHA256 CSRs PHP Openssl,php,openssl,sha256,Php,Openssl,Sha256,我也在尝试使用PHP开发某种PKI管理,我发现使用PHP Openssl存在许多问题(部分到期文档) 例如,我通过硬方法(try and error)了解到PHP openssl并没有真正检查openssl_CONF环境变量,使用不同配置文件的唯一真正方法是使用$configArray('config'=>file_path)参数 目前,我一直在尝试使用SHA256哈希方法生成CSR。对于测试,我使用了这个最小(但有效)的openssl.conf配置: distinguished_name =
distinguished_name = req_distinguished_name
[req]
default_md = sha256
[req_distinguished_name]
[end_req_ext]
keyUsage = digitalSignature,keyEncipherment
extendedKeyUsage = serverAuth,clientAuth
(请注意,$configArray['digest\u alg']参数覆盖了'default\u md'设置
我使用此代码进行测试:
$config = array(
'digest_alg' => "sha256",
'private_key_bits' => 384,
'config' => "/tmp/opensslmy.conf"
);
$dn = array(
"countryName" => "UK",
"stateOrProvinceName" => "Somerset",
"localityName" => "Glastonbury",
"organizationName" => "The Brain Room Limited",
"organizationalUnitName" => "PHP Documentation Team",
"commonName" => "Wez Furlong"
);
$key = openssl_pkey_new($config);
if (!$key) {
print "Error on PKEY_NEW: ".openssl_error_string()."\n";
exit(1);
}
$csr = openssl_csr_new ( $dn , $key, $config );
$pem = "";
if (openssl_csr_export($csr, $pem)) {
print $pem."\n";
} else {
print "Error on CSR_NEW: ".openssl_error_string()."\n";
}
它失败了:
PHP Warning: openssl_csr_new(): Error signing request in /home/mark/Desktop/ssltest.php on line 25
PHP Warning: openssl_csr_export() expects parameter 1 to be resource, boolean given in /home/mark/Desktop/ssltest.php on line 27
Error on CSR_NEW: error:0E06D06C:configuration file routines:NCONF_get_string:no value
如果将初始$config数组'digest_alg'设置为md5或sha1,它将像一个符咒一样工作,并使用给定的哈希算法成功地生成CSR
我还尝试从配置数组中删除'digest_alg'键,并在配置文件中专门指定它(根据我的经验,即使对于openssl req-new命令,-sha256也不起作用,这是生成sha256 csr的唯一方法)
我目前正在使用PHP5.5.9和OpenSSL 1.0.1f
我做错了什么?
PHP版本太旧?问题不在于算法,而在于私钥位太小。这将触发错误并导致CSR创建失败。问题不在于算法,而在于私钥位太小。这将触发错误并导致CSR创建失败