CakeFest 2024: The Official CakePHP Conference

openssl_pkcs12_export

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

openssl_pkcs12_exportPKCS#12 互換の証明書保存ファイルを変数にエクスポートする

説明

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

openssl_pkcs12_export() は、 certificatePKCS#12 ファイルフォーマットにしたものを output で指定した文字列に格納します。

パラメータ

x509

使用できる値の一覧は キー/証明書パラメータ を参照ください。

output

成功した場合に、ここに PKCS#12 が保存されます。

private_key

PKCS#12 ファイルのプライベートキーコンポーネント。 正しい値の一覧については、Public/Private Key parameters を参照ください。

passphrase

PKCS#12 ファイルのロックを解除するためのパスワード。

options

オプションの配列。以下に示すキー以外は無視されます。

キー 説明
"extracerts" PKCS#12 ファイルに含まれる単一の証明書、または 外部の証明書の配列
"friendly_name" 与えられた証明書とキーで使われる文字列

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン 説明
8.0.0 certificate は、 OpenSSLCertificate クラスのインスタンスを受け入れるようになりました。 これより前のバージョンでは、 OpenSSL X.509 CSR 型のリソースを受け入れていました。
8.0.0 private_key は、 OpenSSLAsymmetricKey または OpenSSLCertificate インスタンスを受け入れるようになりました。 これより前のバージョンでは、 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