2015-04-15 80 views
0

我已经转换的公钥(.CER)和私钥(.KEY)以PEM格式,但我不得不使用命令行,将它们转换为:是否有可能通过只使用PHP openssl函数将.cer和.key文件转换为.pem?

$openSSLpath = "c:\OpenSSL-Win64\bin\openssl.exe"; //Path to OpenSSL exe 
$path = "c:\appserver\Apache2.2\htdocs\FIEL";  //Path to Project Folder 
$rutaCer = $path.'\GAMA600504JP1.cer'; 
$rutaKey = $path.'\GAMA600504JP1.key'; 
$passwordKey = '12345678a'; 

$cmdKey = $openSSLpath." pkcs8 -inform DER -in ".$rutaKey." -passin pass:".$passwordKey." -out ".$rutaKey.".pem"; 
exec($cmdKey); 

$cmdCer = $openSSLpath." x509 -inform DER -outform PEM -in ".$rutaCer." -pubkey -out ".$rutaCer.".pem"; 
exec($cmdCer); 

这正确生成的.PEM文件,但我需要知道是否有可能通过任何其他方式使用PHP来做到这一点。请注意,我对openSSL完全陌生,这是我在PHP上发现的唯一方法。

为此,我必须确保OpenSSL的位置正确并安装在我的服务器上,并且为了转换为.pem,我必须将.cer和.key文件临时保存在服务器中由于安全原因。

有没有其他办法?

回答

1

您可以通过简单的代码轻松地将您的der数据转换为PEM。

$rutaCer = file_get_contents($path.'\GAMA600504JP1.cer'); 
$rutaKey = file_get_contents($path.'\GAMA600504JP1.key'); 

echo "-----BEGIN PRIVATE KEY-----\n" . chunk_split(base64_encode($rutaKey), 64, "\n") . "-----END PRIVATE KEY-----"; 
echo "-----BEGIN CERTIFICATE-----\n" . chunk_split(base64_encode($rutaCer), 64, "\n") . "-----END CERTIFICATE-----"; 

// Save anywhere 

PHP有导出到PEM的功能,但是从二进制DER格式加载密钥/证书存在问题。

另一种方式可以使用phpsec库。

+0

嗨kba,当我使用你的代码时,我得到一个从OpenSSL – EfraimPC

+0

得到的完全不同的pem文件有什么区别?在base64字符串或标题(BEGIN,END)?你使用什么命令来生成.cer和.key文件?如果我不知道文件中究竟有什么内容或openssl命令的输出有什么不同,我无法帮助您。 – kba

相关问题