(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
openssl_csr_sign — Подписывает CSR через другой сертификат (или им же) и создаёт сертификат
$csr,$ca_certificate,$private_key,$days,$options = null,$serial = 0,$serial_hex = nullФункция openssl_csr_sign() создаёт сертификат x509 из заданного CSR.
Замечание: Для корректной работы этой функции должен существовать правильный openssl.cnf. Для более подробной информации смотрите замечания под разделом установки.
csrCSR, который создала функция openssl_csr_new(). Также может быть путём на кодированный в PEM CSR, если задано как 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.
serial_hex
Необязательная шестнадцатеричная строка, представляющая серийный номер выданного сертификата.
Если задана, она приоритетнее значения параметра serial.
Если не указана или задана как null, вместо неё используется
значение параметра serial.
Функция возвращает экземпляр OpenSSLCertificate
в случае успешного выполнения или false, если возникла ошибка.
| Версия | Описание |
|---|---|
| 8.4.0 |
Добавлен параметр serial_hex.
|
| 8.0.0 |
On success, this function returns an OpenSSLCertificate instance now;
previously, a resource of type OpenSSL X.509 was returned.
|
| 8.0.0 |
csr теперь принимает экземпляр OpenSSLCertificateSigningRequest;
ранее принимался ресурс (resource) типа OpenSSL X.509 CSR.
|
| 8.0.0 |
ca_certificate теперь принимает экземпляр OpenSSLCertificate;
ранее принимался ресурс (resource) типа OpenSSL X.509 CSR.
|
| 8.0.0 |
private_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";
}
?>