Я хочу, чтобы цифровой подписать XML-файл с PHP с использованием OpenSSL, до сих пор я могу генерировать XML со всей необходимой мне информацией, и у меня есть рабочая демонстрация, которая подписывает и проверяет подпись (объявляет закрытый и открытый ключи как строку ). У меня есть файл .cer и файл .key, которые я хочу использовать для подписи файла XML. Как я могу это достичь? Цель состоит в том, что конечный пользователь просто загружает эти сертификаты и загружает подписанный XML. (Некоторая конкретная документация об этом очень ценится)
EDIT: Хорошо, теперь я ознакомлен с 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 использует его, изучая исходный код утилиты openssl smime
. Исходный код можно найти в <openssl src>/apps/smime.c
. Вас интересуют блоки кода для operation == SMIME_SIGN
и, возможно, флаг PKCS7_STREAM
.
В настоящее время я использую сайты в hostgator, и я поднял билет по этому вопросу, они настроили OpenSSL на сервере и снова включили его для меня, вместо этого вместо exec () для выполнения i использовал shell_exec (), затем выполнил эту команду непосредственно в консоль linux выглядела так:
shell_exec('openssl pkcs8 -inform DER -in '.$_SERVER['DOCUMENT_ROOT'].'/'.$path1.' -passin pass:'.$contrasena.' -out '.$_SERVER['DOCUMENT_ROOT'].'/'.$path1.'.pem');
Это была единственная проблема.