PHP数字签名


PHP Digital Signatures

我想使用PHP使用OpenSSL对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);

非常感谢有关这方面的一些具体文档

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

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

我目前正在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');

这一直是唯一的问题。