生成SHA256 CSRs PHP Openssl

时间:2016-06-07 13:08:16

标签: php openssl sha256

我也尝试使用PHP开发某种PKI管理,并且我使用PHP Openssl发现了许多问题(部分原因)。

例如,我通过艰难的方式(try-and-error)了解到PHP openssl并没有真正检查OPENSSL_CONF环境变量,使用不同配置文件的唯一真正方法是使用$ configArray( ' config' => file_path)参数。

目前,我一直试图使用SHA256哈希方法生成CSR。对于测试,我使用这个最小(但工作)的openssl.conf配置:

distinguished_name  = req_distinguished_name
[req]
default_md          = sha256
[req_distinguished_name]
[end_req_ext]
keyUsage                = digitalSignature,keyEncipherment
extendedKeyUsage        = serverAuth,clientAuth

(请注意,$ configArray [' digest_alg']参数会覆盖' default_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。

我还尝试删除了&#39; digest_alg&#39;来自配置数组的密钥并在配置文件中专门指定它(就我的经验而言,即使对于openssl req -new命令,-sha256也不起作用,这是生成sha256 CSR的唯一方法)< / p>

我目前正在使用PHP 5.5.9和OpenSSL 1.0.1f。

我做错了什么? 太旧的PHP版本?

1 个答案:

答案 0 :(得分:0)

问题不是算法,而是较小的private_key_bits大小。这将触发错误,并且无法创建CSR。