Как создать квалифицированное устройство для создания электронной подписи

QSCD можно развернуть как облачную службу, если она соответствует требуемым стандартам. Я не собираюсь создавать его по законодательным причинам, а скорее для того, чтобы мое программное обеспечение могло доказать, что сертификат исходит от нас.

Идея состоит в том, чтобы создать PKI, в которой QSCD «выдает» пользователю ключи, которые затем электронной подписью PDF-файла. Если открытый ключ может расшифровать файл, это доказывает, что он исходил от этого пользователя (в данном случае это будет учетная запись бота, подписывающего сертификаты).

Я нашел онлайн-решения, которые дают вам право платить за такие услуги, но хотел узнать, как создать свое собственное решение. Я столкнулся с использованием openssl_* для достижения этой цели. Я просмотрел несколько ответов, чтобы узнать, как создавать эти ключи.

Часть, на которой я сейчас застрял, - это то, как загрузить PDF-документ и использовать закрытый ключ для его электронной подписи, а затем экспортировать новый PDF-файл, а затем как расшифровать его с помощью открытого ключа, гарантируя, что он не был подделан. .

Моя текущая попытка выглядит так:

$config = array(
    "digest_alg" => 'sha512',
    "private_key_bits" => 4096,
    "private_key_type" => OPENSSL_KEYTYPE_RSA
);

$keyPair = openssl_pkey_new($config);
$privateKey = NULL;
openssl_pkey_export($keyPair, $privateKey);
$keyDetails = openssl_pkey_get_details($keyPair);
$publicKey = $keyDetails['key'];

openssl_pkcs7_sign("toSign.pdf", "signed.pdf"); // how to sign using the private key?
penssl_public_decrypt("signed.pdf", $publicKey);

person Jaquarh    schedule 10.10.2018    source источник