CakeFest 2024: The Official CakePHP Conference

openssl_pkcs12_export

(PHP 5 >= 5.2.2, PHP 7, PHP 8)

openssl_pkcs12_exportЭкспортирует совместимый с PKCS#12 файл хранилища сертификатов в переменную

Описание

openssl_pkcs12_export(
    OpenSSLCertificate|string $certificate,
    string &$output,
    OpenSSLAsymmetricKey|OpenSSLCertificate|array|string $private_key,
    string $passphrase,
    array $options = []
): bool

openssl_pkcs12_export() сохраняет x509 в переменную out в формате PKCS#12.

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

x509

Для списка корректных значений смотрите Параметры ключей/сертификатов.

output

В случае успешного выполнения будет содержать PKCS#12.

private_key

Компонент закрытого ключа файла PKCS#12. Список допустимых значений смотрите на странице параметров открытого/закрытого ключа.

passphrase

Пароль для шифрования файла PKCS#12.

options

Массив опций. Не описанные здесь ключи будут проигнорированы.

Ключ Описание
"extracerts" массив дополнительных сертификатов или один сертификат для включения в файл PKCS#12.
"friendly_name" строка для использования сертификатом и ключом

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

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

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

Версия Описание
8.0.0 certificate теперь принимает экземпляр OpenSSLCertificate; ранее принимался ресурс (resource) типа OpenSSL X.509 CSR.
8.0.0 private_key теперь принимает экземпляр OpenSSLAsymmetricKey или OpenSSLCertificate; ранее принимался ресурс (resource) типа OpenSSL key или OpenSSL X.509.
add a note

User Contributed Notes 5 notes

up
1
Robert
9 years ago
If you need to provide multiple additional certificates, the 'extracerts' argument needs to be an array with one certificate per element:
<?php
$args
= array(
'extracerts' => array(
0 => '-----BEGIN CERTIFICATE----- cert1 ...',
1 => '-----BEGIN CERTIFICATE----- cert2 ...',
// ...
)
);
?>

You can use this to prepare a PEM.

<?php
$pemChain
= '...';
preg_match_all('/(-----BEGIN CERTIFICATE-----.*?-----END CERTIFICATE-----)/si', $pemChain, $matches);
$args = array('extracerts' => $matches[0]);
openssl_pkcs12_export($signed_csr, $cerificate_out, $private_key_resource, $passphrase, $args);
?>
up
2
simoncpu was here
13 years ago
If your certificate is not password-protected, just use null or a blank string. Otherwise, this function won't work.
up
1
ismael at privasy dot org
9 years ago
in order to export a private key to pkcs12 format, the input certificate must contain both private and associated public key in PEM format ,

-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

else this function might return the following error "openssl_pkcs12_export(): cannot get cert from parameter 1"
up
1
Anonymous
10 years ago
If you want to include CA-Certificates in the PKCS12 it can be accomplished by using the $args parameter.
<?php
$args
= array(
'extracerts' => $CAcert,
'friendly_name' => 'My signed cert by CA certificate'
);
openssl_pkcs12_export($signed_csr, $cerificate_out, $private_key_resource, $passphrase, $args);
?>
up
-9
mryom
12 years ago
Example:

<?php
$key
= openssl_pkey_get_private(Private_Key, Password);

openssl_pkcs12_export(Certificate, $iis, $key, Password);
?>
To Top