(PHP 4 >= 4.2.0, PHP 5, PHP 7)
openssl_csr_new — Генерирует CSR
$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 | integer | default_bits | Задает, сколько бит должно использоваться для генерации закрытого ключа |
private_key_type | integer | none | Задает тип создаваемого закрытого ключа. Одна из констант:
OPENSSL_KEYTYPE_DSA ,
OPENSSL_KEYTYPE_DH ,
OPENSSL_KEYTYPE_RSA или
OPENSSL_KEYTYPE_EC .
По умолчанию OPENSSL_KEYTYPE_RSA .
|
encrypt_key | boolean | encrypt_key | Должен ли шифроваться (паролем) экспортируемый ключ? |
encrypt_key_cipher | integer | 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" => "[email protected]"
);
// Создание пары закрытый/открытый ключ
$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');
?>