PHP数字签名

时间:2014-07-03 01:05:37

标签: php html openssl certificate digital-certificate

我想使用OpenSSL使用PHP对XML文件进行数字签名,到目前为止,我可以使用我需要的所有信息生成XML,并且我有一个可以签名和验证签名的工作演示(声明私钥和公钥作为一个字符串)。我有一个.cer文件和一个.key文件,它们是我想用来签署XML文件的文件。我怎样才能做到这一点? 目标是最终用户只需上传这些证书并下载签名的XML。(非常感谢关于此的一些具体文档)

编辑:好的我现在熟悉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);

2 个答案:

答案 0 :(得分:0)

  

非常感谢关于此的一些具体文档

您要查找的文档是PKCS7_sign(3)

您还可以通过检查openssl smime实用程序的源代码来了解OpenSSL如何使用它。您可以在<openssl src>/apps/smime.c找到源代码。您对operation == SMIME_SIGN的代码块感兴趣,可能还有PKCS7_STREAM标志。

答案 1 :(得分: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');

这是唯一的问题。