openssl_csr_new

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

openssl_csr_newГенерирует CSR

Описание

openssl_csr_new(
    array$distinguished_names,
    OpenSSLAsymmetricKey&$private_key,
    ?array$options = null,
    ?array$extra_attributes = null
): OpenSSLCertificateSigningRequest|false

openssl_csr_new() создаёт новый CSR основываясь на информации указанной в параметре distinguished_names.

Замечание: Для корректной работы этой функции должен существовать правильный openssl.cnf. Для более подробной информации смотрите замечания под разделом установки.

Список параметров

distinguished_names

Уникальное имя (Distinguished Name) или поля субъекта для использования в сертификате.

private_key

Параметр private_key должен быть задан закрытым ключом ранее сгенерированным функцией openssl_pkey_new() (или полученный с помощью любой другой функции семейства openssl_pkey). Соответствующая открытая часть ключа будет использована для подписания CSR.

options

По умолчанию для инициализации запроса используется информация из вашего системного openssl.conf. Вы можете указать секцию конфигурационного файла путём задания ключа config_section_section в options. Также вы можете задать альтернативный файл конфигурации openssl путём задания ключа config значением пути до него. Соответствие ключей, указанных в options ключам из openssl.conf представлено ниже.

Переопределение конфигурации
Ключ optionsТипСоответствие в openssl.confОписание
digest_algstringdefault_mdОдин из методов openssl_get_md_methods()
x509_extensionsstringx509_extensionsОпределяет, какое расширение должно использоваться для создания сертификата x509
req_extensionsstringreq_extensionsОпределяет, какое расширение должно использоваться для создания CSR
private_key_bitsintdefault_bitsЗадаёт, сколько бит должно использоваться для генерации закрытого ключа
private_key_typeintnoneЗадаёт тип создаваемого закрытого ключа. Одна из констант: OPENSSL_KEYTYPE_DSA, OPENSSL_KEYTYPE_DH, OPENSSL_KEYTYPE_RSA или OPENSSL_KEYTYPE_EC. По умолчанию OPENSSL_KEYTYPE_RSA.
encrypt_keyboolencrypt_keyДолжен ли шифроваться (паролем) экспортируемый ключ?
encrypt_key_cipherintnone Одна из констант шифров.
curve_namestringnone Одно из openssl_get_curve_names().
configstringN/A Путь до альтернативного файла конфигурации openssl.conf.
extra_attributes

extra_attributes используется для указания дополнительных опций для CSR. И distinguished_names, и extra_attributes являются ассоциативными массивами, ключи которых преобразуются в OI-ы и применяются к соответствующим частям запроса.

Возвращаемые значения

Возвращает CSR или false, если возникла ошибка.

Список изменений

ВерсияОписание
8.0.0csr теперь принимает экземпляр OpenSSLCertificateSigningRequest; ранее принимался ресурс (resource) типа OpenSSL X.509 CSR.
8.0.0private_key теперь принимает экземпляр OpenSSLAsymmetricKey; ранее принимался ресурс (resource) типа OpenSSL key.
7.1.0 Параметр options теперь поддерживает curve_name.

Примеры

Пример #1 Создание самоподписанного сертификата

<?php
// для сервера сертификации SSL, commonName является доменным именем
// для сертификатов S/MIME, commonName является владельцем расположения адреса email
// и поля идентификации относятся к владельцу домена или электронной почты,
// подлежащим защите
$dn = array(
"countryName" => "GB",
"stateOrProvinceName" => "Somerset",
"localityName" => "Glastonbury",
"organizationName" => "The Brain Room Limited",
"organizationalUnitName" => "PHP Documentation Team",
"commonName" => "Wez Furlong",
"emailAddress" => "wez@example.com"
);

// Создание пары закрытый/открытый ключ
$privkey = openssl_pkey_new(array(
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
));

// Создание CSR
$csr = openssl_csr_new($dn, $privkey, array('digest_alg' => 'sha256'));

// Создание самоподписанного сертификата со сроком жизни 365 дней
$x509 = openssl_csr_sign($csr, null, $privkey, $days=365, array('digest_alg' => 'sha256'));

// Сохранение закрытого ключа, CSR и самоподписанного сертификата
openssl_csr_export($csr, $csrout) and var_dump($csrout);
openssl_x509_export($x509, $certout) and var_dump($certout);
openssl_pkey_export($privkey, $pkeyout, "mypassword") and var_dump($pkeyout);

// Покажем возникшие ошибки, если они были
while (($e = openssl_error_string()) !== false) {
echo
$e . "\n";
}
?>

Пример #2 Создание самоподписанного ECC сертификата (начиная с PHP 7.1.0)

<?php
$subject
= array(
"commonName" => "docs.php.net",
);

// Создание пары закрытый/открытый ключ
$private_key = openssl_pkey_new(array(
"private_key_type" => OPENSSL_KEYTYPE_EC,
"curve_name" => 'prime256v1',
));

// Создание CSR
$csr = openssl_csr_new($subject, $private_key, array('digest_alg' => 'sha384'));

// Создание самоподписанного EC сертификата
$x509 = openssl_csr_sign($csr, null, $private_key, $days=365, array('digest_alg' => 'sha384'));
openssl_x509_export_to_file($x509, 'ecc-cert.pem');
openssl_pkey_export_to_file($private_key, 'ecc-private.key');
?>

Смотрите также

  • openssl_csr_sign() - Подписать CSR с помощью другого сертификата (или им же) и создать сертификат
To Top