如果您的证书未受密码保护,只需使用 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”