Сертификат для 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, они помогут ему работать так, как вам нужно.