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);