2016-07-05 120 views
1

簽署文件,我需要簽署關於PHP的PDF文檔,我使用TCPDF庫做使用DER格式化鍵對PHP

問題是我的.CER。重點文件在DER格式和openssl_pkcs7_sign()功能可如果是這種格式加載私鑰

如果我用我的終端上OpenSSL的命令,我的鑰匙由二進制DER格式轉換爲一個SCII一切正常,但我不想使用exec函數通過PHP調用系統函數。

經過一點研究,我發現這個問題: Load a .key file from DER format to PEM with PHP 對答案建議打開文件,獲取內容並使用轉換。

function der2pem($der_data, $type='CERTIFICATE') { 
    $pem = chunk_split(base64_encode($der_data), 64, "\n"); 
    $pem = "-----BEGIN ".$type."-----\n".$pem."-----END ".$type."-----\n"; 
    return $pem; 
} 

但是當我使用這個功能我的數據轉換的結果是通過在控制檯上OpenSSL的和功能openssl_pkcs7_sign()生成的文件不同再次拋出我的錯誤

UPDATE
這是我的PHP代碼轉換我的文件:

<?php 
$myKey = 'p-key.key'; 
$private_key = file_get_contents($myKey); 

echo der2pem($private_key,'PRIVATE KEY'); 

file_put_contents('p-key.key.pem', der2pem($private_key,'PRIVATE KEY')); 

function der2pem($der_data, $type = 'CERTIFICATE') 
{ 
    $pem = chunk_split(base64_encode($der_data), 64, "\n"); 
    $pem = "-----BEGIN ".$type."-----\n".$pem."-----END ".$type."-----\n"; 
    return $pem; 
} 

這是我OpenSSL的命令:

openssl pkcs8 -in p-key.key -out p-key.key.pem -inform DER -outform PEM 


對此有一個解釋?
如何正確的方法來做到這一點?
我應該使用exec來解決我的問題嗎?

感謝很多提前
讓我知道如果你需要更多的信息

+0

嗨,沒有更多的信息,這裏很難評論 - 當你說這是不同的 - 你在哪裏看到這種差異..?數據全部在一行上嗎?數據是否顯示正確的字符?您是否在使用私鑰或CER和KEY時遇到問題?在調用der2pem函數時你在做什麼?寫它到屏幕?寫入文件?把結果推到一些其他變量? – Damien

+0

嗨,當我轉換我的私鑰我得到了一個有效的文件來執行該標誌,但是當我使用PHP函數轉儲文件上的結果我得到了一個不同的字符串,類似的開始,但不同 我要去測試功能轉換我的CER文件 – Mirdrack

+0

你能分享你正在使用的例程嗎? – Damien

回答

1

沒有看到你在做什麼,我可以告訴你,你具備的功能有工作。它可能很大程度上取決於幾件事情,爲什麼它不適合你,沒有更多的信息,這將很難說。

默認情況下,該函數會將您的數據轉換爲base64並添加「BEGIN CERTIFICATE」頁眉和頁腳 - 請注意,如果您正在調用該函數來處理私鑰,則需要像這樣調用它:

$keyVal = der2pem($YOUR_KEY_DATA, 'PRIVATE KEY');