#php #html #openssl #certificate #digital-certificate
#php #HTML #openssl #сертификат #цифровой сертификат
Вопрос:
Я хочу подписать XML-файл цифровой подписью с помощью PHP, используя OpenSSL, пока что я могу сгенерировать 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:filesClavepr.key.pem");
$public_key_id=openssl_get_publickey("file://C:filescert.cer.pem");
$o=openssl_sign($data,$cadenafirmada, $priv_key_id,OPENSSL_ALGO_SHA1);
$sello=base64_encode($cadenafirmada);
var_dump($sello);
Комментарии:
1. @jcaron обновил мой пост
Ответ №1:
Некоторая конкретная документация по этому поводу очень ценится
Документация, которую вы ищете, является PKCS7_sign(3)
.
Вы также можете увидеть, как OpenSSL использует это, изучив исходный код openssl smime
утилиты. Вы можете найти исходный код по адресу <openssl src>/apps/smime.c
. Вас интересуют блоки кода для operation == SMIME_SIGN
и, вероятно, PKCS7_STREAM
флаг.
Комментарии:
1. Я прочитал всю страницу и уже лучше ознакомился с OpenSSL, решение PKCS7 не сработало, мне удалось программно преобразовать мой сертификат в кодировке .cer в формат PEM, и я также преобразовал свой файл .key в формат PEM, используя pcks8 в консоли OpenSSL, используя 2 ключа в формате PEM, я также проверил их, но мне все еще нужно найти способ выполнить преобразование pkcs8 в PHP.
Ответ №2:
В настоящее время я использую сайты в 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');
Это была единственная проблема с самого начала.