我在windows上从php5.6升级到php8.2后得到这个错误。看起来新的openssl dll不支持拆分我的苹果推送通知证书pk12文件到单独的证书和密钥数组。有什么办法吗?在stackoverflow上还有一个类似的问题,但是它只讨论ubuntu,不讨论windows。我试图向ubuntu相关文章的贡献者提问,但我没有足够的权限。
$p12_filename = "..\path\to\pass.com.testpass.p12";
$p12data = file_get_contents($p12_filename);
$p12Password = 'MyPassword';
$rp12 = array();
// following function works in php5.6 but fails in php8.2
$rc = openssl_pkcs12_read($p12data, $rp12, $p12Password);
$cert_data = $rp12['cert'];
$cert_key = $rp12['pkey'];
所以根据上面Jacob Mulquin提供的链接, PHP8.2中提供的openssl组件删除了一个遗留函数,该函数阻止它解析以前支持的某些类型的证书。由于我不需要PHP8.2的最新语言增强功能,对我来说(在windows上)最快的解决方案是用下一个最新版本PHP8.1.13取代PHP8.2。
您可以使用openssl命令进行预提取,并在php中使用证书
openssl pkcs12 -in key.p12 -legacy -out Behsazan.crt -node