2014-07-03 47 views
1

我想用PHP使用OpenSSL對XML文件進行數字簽名,到目前爲止,我可以生成一個包含我需要的所有信息的XML,並且我有一個簽名和驗證簽名的工作演示(聲明私有和公鑰作爲字符串)。我有一個.cer文件和一個.key文件,這些文件是我想用來簽署XML文件的文件。我怎樣才能做到這一點? 目標是最終用戶只需上傳這些證書並下載已簽名的XML。(約今一些具體的文檔不勝感激)PHP數字簽名

編輯:好吧,我現在熟悉了OpenSSL和它的功能,但我仍然需要知道如何做包括這在PHP中:

openssl pkcs8 -inform DER -in c:/route/myfile.key -passin pass:contraseña -out c:/route/myfile.pem 

要這樣:

$data = "||2.0|ABCD|2|03-05-2010T14:11:36|49|2008|INGRESO|UNA SOLA EXHIBICIÓN|2000.00|00.00|2320.00|PAMC660606ER9|CONTRIBUYENTE PRUEBASEIS PATERNOSEIS MATERNOSEIS|PRUEBA SEIS|6|6|PUEBLA CENTRO|PUEBLA|PUEBLA|PUEBLA||MÉXICO|72000|CAUR390312S87|ROSA MARÍA CÁLDERON URIEGAS|TOPOCHICO|52|JARDINES DEL VALLE|NUEVO LEÓN|MEXICO|95465|1.00|SERVICIO|01|ASESORIA FISCAL Y ADMINISTRATIVA|2000.00|IVA|16.00|320.00|| "; 

$priv_key_id=openssl_get_privatekey("file://C:\files\Clavepr.key.pem"); 
$public_key_id=openssl_get_publickey("file://C:\files\cert.cer.pem"); 
$o=openssl_sign($data,$cadenafirmada, $priv_key_id,OPENSSL_ALGO_SHA1); 
$sello=base64_encode($cadenafirmada); 

var_dump($sello); 
+0

向我們展示您的代碼... – jcaron

+0

@jcaron更新了我的文章 – Carlos

回答

0

我目前在hostgator中使用的網站,我提出了關於此事的一張票,他們在服務器中配置了OpenSSL併爲我啓用了它,然後不再使用exec()來執行我用過的shell_exec(),然後執行該命令直接進入Linux控制檯,它看起來像這樣:

shell_exec('openssl pkcs8 -inform DER -in '.$_SERVER['DOCUMENT_ROOT'].'/'.$path1.' -passin pass:'.$contrasena.' -out '.$_SERVER['DOCUMENT_ROOT'].'/'.$path1.'.pem'); 

這是唯一的問題。

0

這個了一些具體的文件是極大的讚賞

您正在查找的文檔是PKCS7_sign(3)

您還可以通過檢查openssl smime實用程序的源代碼來了解OpenSSL如何使用它。你可以在<openssl src>/apps/smime.c找到源代碼。您對operation == SMIME_SIGN的代碼塊感興趣,並且可能是PKCS7_STREAM標誌。

+0

我已經閱讀了整個頁面,現在更熟悉OpenSSL,PKCS7不是解決方案的工作,我設法以編程方式將我的.cer DER編碼的證書轉換爲PEM格式,並且我已經將我的.key文件轉換爲PEM格式,在OpenSSL控制檯中使用pcks8,使用PEM格式的2個密鑰,我也驗證了它們,但我仍然需要找到一種方法PHP中的pkcs8轉換。 – Carlos