openssl_csr_sign

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

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

Описание

openssl_csr_sign ( mixed $csr , mixed $cacert , mixed $priv_key , int $days [, array $configargs [, int $serial = 0 ]] ) : resource

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

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

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

csr

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

cacert

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

priv_key

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

days

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

configargs

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

serial

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

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

Возвращает ресурс сертификата x509, либо FALSE, если что-то пошло не так.

Примеры

Пример #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$privkey365, array('digest_alg'=>'sha256') );

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

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