Фон
Мы разрешаем пользователям загружать в нашу бэкэнд-систему файл pdf (Laravel / php), содержащий информацию об их зарплате, которую они загружают с веб-сайта правительства Нидерландов. агентство (UWV Verzekeringsbericht). Этот документ имеет цифровую подпись.
Цель
Мы хотим проверить и подтвердить эту подпись, поэтому мы знаем, что пользователь ничего не изменил из этого файла и что файл правильный. Как вы можете проверить сертификат в Adobe Acrobat Reader.
Вопрос
Я пытался выполнить sh это в течение последних нескольких часов, но потому что из моих ограниченных знаний / опыта я не могу заставить это работать. Любая информация и / или дополнительная информация / учебные пособия о том, как выполнить sh, будет очень признательна. Я готов прочитать об основах этого, но я действительно не знаю, с чего начать.
Код
О, мальчик, будь готов иметь массивный ум глядя на мой код. Это результат того, что вы не знаете, как все работает, ищите решения по переполнению стека и пробуете их.
public function first_attempt(): void
{
$path = app_path('/Verzekeringsbericht.pdf');
$content = file_get_contents($path);
$regexp = '#ByteRange\s*\[(\d+) (\d+) (\d+)#'; // subexpressions are used to extract b and c
$result = [];
preg_match_all($regexp, $content, $result);
// $result[2][0] and $result[3][0] are b and c
if (isset($result[2]) && isset($result[3]) && isset($result[2][0]) && isset($result[3][0])) {
$start = $result[2][0];
$end = $result[3][0];
if ($stream = fopen($path, 'rb')) {
$signature = stream_get_contents($stream, $end - $start - 2, $start + 1); // because we need to exclude < and > from start and end
fclose($stream);
}
file_put_contents('signature.pkcs7', hex2bin($signature));
shell_exec('openssl pkcs7 -in signature.pkcs7 -inform DER -print_certs > cert.pem');
}
}
public function second_attempt(): void
{
$path = 'file://' . app_path('/qveucag4.pem');
$authorKey = openssl_pkey_get_public($path);
}
public function third_attempt(): void
{
$pemPath = app_path('/qveucag4.pem');
$fileCertPath = app_path('/cert.pem');
shell_exec("openssl verify -verbose -CAfile $pemPath $fileCertPath");
}