openssl_csr_sign

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

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

Описание

openssl_csr_sign(
    OpenSSLCertificateSigningRequest|string$csr,
    OpenSSLCertificate|string|null$ca_certificate,
    OpenSSLAsymmetricKey|OpenSSLCertificate|array|string$private_key,
    int$days,
    ?array$options = null,
    int$serial = 0
): OpenSSLCertificate|false

openssl_csr_sign() создаёт сертификат x509 из заданного CSR.

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

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

csr

Созданный с помощью openssl_csr_new()CSR. Также может быть путём на кодированный в PEMCSR, если задано как file://path/to/csr или экспортированной строкой, созданной с помощью openssl_csr_export().

ca_certificate

Создаваемый сертификат будет подписан ca_certificate. Если ca_certificate задан как null, то будет сгенерирован самоподписанный сертификат.

private_key

private_key - секретный ключ, соответствующий ca_certificate.

days

days - время жизни создаваемого сертификата, в днях.

options

Можно тонко настроить подпись CSR с помощью options. Подробности смотрите в описании функции openssl_csr_new(), в разделе посвящённом параметру options.

serial

Опциональный серийный номер выпускаемого сертификата. Если не указано, то по умолчанию будет использован 0.

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

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

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

ВерсияОписание
8.0.0 On success, this function returns an OpenSSLCertificate instance now; previously, a resource of type OpenSSL X.509 was returned.
8.0.0csr теперь принимает экземпляр OpenSSLCertificateSigningRequest; ранее принимался ресурс (resource) типа OpenSSL X.509 CSR.
8.0.0ca_certificate теперь принимает экземпляр OpenSSLCertificate; ранее принимался ресурс (resource) типа OpenSSL X.509 CSR.
8.0.0private_key теперь принимает экземпляр OpenSSLAsymmetricKey; ранее принимался ресурс (resource) типа OpenSSL X.509 CSR.

Примеры

Пример #1 Пример openssl_csr_sign() - подпись CSR (как сделать свой собственный CA)

<?php
// Предположим, что CSR получен из поля textarea со веб-страницы
$csrdata = $_POST["CSR"];

// Мы подпишем запрос с помощью сертификата собственного "центра сертификации"
// Для подписи вы можете использовать любой сертификат, но этот процесс бесполезен, если
// сертификат не является доверенным для ПО или пользователей, которые будут его
// использовать

// Нам нужен собственный CA сертификат и его секретный ключ
$cacert = "file://path/to/ca.crt";
$privkey = array("file://path/to/ca.key", "your_ca_key_passphrase");

$usercert = openssl_csr_sign($csrdata, $cacert, $privkey, 365, array('digest_alg'=>'sha256') );

// Теперь напечатаем сертификат, чтобы пользователь мог его скопировать
// и внести в свою локальную конфигурацию (например в файл хранилища SSL сертификатов)
openssl_x509_export($usercert, $certout);
echo
$certout;

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