如果您的证书没有密码保护,只需使用 null 或空字符串。否则,此函数将无法正常工作。
(PHP 5 >= 5.2.2, PHP 7, PHP 8)
openssl_pkcs12_export — 将符合 PKCS#12 标准的证书存储文件导出到变量
$certificate
,&$output
,$private_key
,$passphrase
,$options
= []
openssl_pkcs12_export() 将 certificate
存储到一个名为 output
的字符串中,以 PKCS#12 文件格式存储。
版本 | 描述 |
---|---|
8.0.0 |
certificate 现在接受 OpenSSLCertificate 实例;以前,它接受 OpenSSL X.509 CSR 类型的 资源。 |
8.0.0 |
private_key 现在接受 OpenSSLAsymmetricKey 或 OpenSSLCertificate 实例;以前,它接受 OpenSSL key 或 OpenSSL X.509 类型的 资源。 |
如果您需要提供多个附加证书,则 "extracerts" 参数需要是一个数组,每个元素代表一个证书
<?php
$args = array(
'extracerts' => array(
0 => '-----BEGIN CERTIFICATE----- cert1 ...',
1 => '-----BEGIN CERTIFICATE----- cert2 ...',
// ...
)
);
?>
您可以使用它来准备 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);
?>
为了将私钥导出到 pkcs12 格式,输入证书必须包含 PEM 格式的私钥和关联的公钥,
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
否则,此函数可能会返回以下错误 "openssl_pkcs12_export(): cannot get cert from parameter 1"