2015-04-15 78 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

相關問題