openssl_csr_new

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

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

Описание

openssl_csr_new ( array $dn , resource &$privkey , array $configargs = ? , array $extraattribs = ? ) : mixed

openssl_csr_new() создает новый запрос на подпись сертификата (Certificate Signing Request или CSR) основываясь на информации указанной в параметре dn.

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

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

dn

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

privkey

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

configargs

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

Переопредлеление конфигурации
Ключ configargs Тип Соответствие в openssl.conf Описание
digest_alg string default_md Один из методов openssl_get_md_methods()
x509_extensions string x509_extensions Определяет, какое расширение должно использоваться для создания сертификата x509
req_extensions string req_extensions Определяет, какое расширение должно использоваться для создания CSR
private_key_bits int default_bits Задает, сколько бит должно использоваться для генерации закрытого ключа
private_key_type int none Задает тип создаваемого закрытого ключа. Одна из констант: OPENSSL_KEYTYPE_DSA, OPENSSL_KEYTYPE_DH, OPENSSL_KEYTYPE_RSA или OPENSSL_KEYTYPE_EC. По умолчанию OPENSSL_KEYTYPE_RSA.
encrypt_key bool encrypt_key Должен ли шифроваться (паролем) экспортируемый ключ?
encrypt_key_cipher int none Одна из констант шифров.
curve_name string none Одно из openssl_get_curve_names().
config string N/A Путь до альтернативного файла конфигурации openssl.conf.

extraattribs

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

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

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

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

Версия Описание
7.1.0 Параметр configargs теперь поддерживает 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($csrnull$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($csrnull$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 с помощью другого сертификата (или им же) и создать сертификат