Сертификат для TCPDF
Я хотел бы создать сертификат (самоподписанный на данный момент) для зашифрованного PDF файла на сервере. Для меня интересен рабочий процесс о том, как с помощью TCPDF.
Что я сделал:
1) Создайте ключи:
openssl req -x509 -nodes -days 365000 -newkey rsa:1024
openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12
2) Затем сгенерируйте PDF с помощью .crt
- файла
3) Затем я начал читать акробат и установил сертификат (tcpdf.p12
). Я использовал Document- > параметры безопасности → цифровой идентификатор
4) Я могу импортировать параметры безопасности, но до сих пор не могу открыть PDF. Не знаю, правильно ли я это делаю? Что происходит с тем, что читатель acrobat 9.5.4 открывает диалоговое окно с вводом пароля. Я указываю пароль и появляется ошибка → неизвестная ошибка → CRecipientList-218
5) Код, который я использовал (в основном то же самое)
$certificate = 'file://../tcpdf.crt';
$info = array(
'Name' => 'TCPDF',
'Location' => 'Office',
'Reason' => 'Testing TCPDF',
'ContactInfo' => 'http://www.tcpdf.org',
);
$pdf->setSignature($certificate, $certificate, 'tcpdfdemo', '', 2, $info);
$pdf->SetProtection($permissions=array('print', 'copy'), $user_pass='', owner_pass=null, $mode=1, $pubkeys=array(array('c' => 'file://../tcpdf.crt', 'p' => array('print'))));
Я объединил следующие примеры:
http://www.tcpdf.org/examples/example_052.phps
http://www.tcpdf.org/examples/example_016.phps
P.S.: Я знаю, что это очень практичный пример. Просто подумал, что легче понять шаги, которые я делаю.
Вопросы:
-
Является ли рабочий процесс в целом правильным: как (!) обращаться к сертификатам для PDF с шифрованием?
-
Когда я создаю файл .p12
, я должен указать пароль для этого файла, который я использовал позже, когда импортировал сертификат в acrobat. Я спрашиваю, потому что у меня есть возможность "по генерации", чтобы указать пароль.
-
Если рабочий процесс прав... как я могу исправить проблему?
Ответы
Ответ 1
Подход в основном правильный, но вы, возможно, пропустили некоторые детали в нем.
Я использую сертификат в формате *.crt
без парольной фразы (включая закрытый и открытый ключ), и он отлично работает.
Также обратите внимание, что вы должны установить расширение OpenSSL в PHP.
См. комментарии к методу TCPDF::setSignature()
от Nicola Asuni:
* To create self-signed signature: openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt
* To export crt to p12: openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12
* To convert pfx certificate to pem: openssl pkcs12 -in tcpdf.pfx -out tcpdf.crt -nodes
Вам не нужно устанавливать какой-либо сертификат в Acrobat Reader - созданные PDF-документы, подписанные с самозаверяющими сертификатами, просто отображаются как ненадежные, но все же они могут нормально открываться.
Ответ 2
Надеюсь, вы также взглянули на комментарии;)
есть мини, как настроить pdf, используя предоставленный файл
особенно
// To open the document you need to install the private key (tcpdf.p12) on the Acrobat Reader. The password is: 1234
однако вам необходимо предоставить setProtection существующий ключ:
'c' => 'file://../tcpdf.crt'
приведенный вами путь просто показывает, где вам нужно указать путь, но сам путь нужно изменить.
Резюме: пожалуйста, прочитайте снова комментарии в файле примера 016, они помогут ему работать так, как вам нужно.