我正在尝试将一些.p12文件转换为.pem。
在我的Mac上它可以工作,没有交互,因为我把密码放在代码中,但是当我使用这段代码时:
system('openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12 -passin pass:');
system('openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12 -passout pass:1234 -passin pass:');
system('openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem -passin pass:1234');
system('cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem');
它会生成空白文件。
我的文件权限是755.对于passin,密码设置为空,这就是为什么它们是空白的...这里没有system()的所有代码都在mac终端中工作..
感谢阅读。希望你能帮忙
答案 0 :(得分:20)
$filename = 'apns-dev-cert.p12';
$password = '...';
$results = array();
$worked = openssl_pkcs12_read(file_get_contents($filename), $results, $password));
if($worked) {
echo '<pre>', print_r($results, true), '</pre>';
} else {
echo openssl_error_string();
}
请尝试运行此代码段。将$password
设置为打开文件所需的密码。如果没有密码,请将其设置为null。我不相信你的openssl
命令需要一个。
你应该使用所需的私钥输出,可能在$results['pkey']
内。
如果您在那里看到私钥,那么您可以将其传递给openssl_pkey_export
以PEM格式获取,然后您可以将其写入文件:
$new_password = null;
$result = null;
$worked = openssl_pkey_export($results['pkey'], $result, $new_password);
if($worked) {
echo "<pre>It worked! Your new pkey is:\n", $result, '</pre>';
} else {
echo openssl_error_string();
}
如果需要,请将$new_password
设置为您想要的pkey密码。
根据我在各种文档页面上阅读的内容, 应该为您工作。
如果确实希望通过炮轰继续使用openssl
命令,请考虑使用proc_open
代替system
,以便您可以正确捕获错误消息。
OpenSSL也可能正在尝试读取配置文件,并且没有权限这样做,尽管应该给你一个错误。