Улучшено, но еще не уверен, что все шаги приводят к правильным ключам / файлам (кто-то может посмотреть на это?):
<?php
echo '<pre>'; error_reporting(E_ALL); ini_set('display_errors', '1');
$dn = array(
"countryName" => "GB",
"stateOrProvinceName" => "Greater London",
"localityName" => "London",
"organizationName" => "XY Ltd",
"emailAddress" => "ab@xy.com"
);
$Configs = array(
'config' => 'C:/wamp/bin/php/php7.0.4/extras/ssl/openssl.cnf',
'digest_alg' => 'sha2',
'x509_extensions' => 'v3_ca',
'req_extensions' => 'v3_req',
'encrypt_key' => true,
'encrypt_key_cipher' => OPENSSL_CIPHER_3DES
);
$privateKey = openssl_pkey_new([
"config" => "C:/wamp/bin/php/php7.0.4/extras/ssl/openssl.cnf",
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
]);
openssl_pkey_export($privateKey, $privKey, null, [
"config" => "C:/wamp/bin/php/php7.0.4/extras/ssl/openssl.cnf",
]);
$a_key = openssl_pkey_get_details($privateKey);
// print_r($a_key);
// print_r($privKey); // Just to test output
file_put_contents('keys/public.key', $a_key['key']);
file_put_contents('keys/private.pem', $privKey);
$csr = openssl_csr_new($dn, $private_key, $Configs);
// var_dump($csr);
openssl_csr_export_to_file($csr, 'C:/wamp/www/php/keys/public.csr' );
openssl_free_key($privateKey);