Отметка времени openssl не может проверить отметку времени - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь завершить процесс запроса / подтверждения метки времени.

Итак, шаг 1 создайте отметку времени request.php

require_once "TrustedTimestamps.php"; //i'm using David Müller script to manage openssl trought php
$signature_filename="example.txt";
$sha256 = hash_file('sha256', 'example.jpg');
$tsa_url = "https://tsa.exampleserver/tsa";

$requestFile = TrustedTimestamps::createRequestfile($sha256,'sha256');
$signature = TrustedTimestamps::signRequestfile($requestFile, $tsa_url);
file_put_contents($signature_filename, base64_decode($signature["response_string"]));

Шаг 2 подтверждение временной отметки validate.php

require_once "TrustedTimestamps.php";
$signature_filename="example.txt";
$sha256 = hash_file('sha256', 'example.jpg');
$tsa_url = "https://tsa.exampleserver/tsa";
$tsa_cert_file="timestampcertificate.crt";
$response_time="1561989750"; //extracted from the response

$content_file=file_get_contents($signature_filename);
$base64_response_string=base64_encode($content_file);

TrustedTimestamps::validate($sha256, $base64_response_string, $response_time, $tsa_cert_file,'sha256');

Шаг 1, кажется, работает правильно, я получаю строку с меткой времени, которую я могу проверить как отдельную метку времени на сайте сервера tsa (у них есть веб-страница с формой для загрузки метки времени и исходного изображения). Мне нужно завершить процесс проверки автоматически, без веб-страницы. Шаг 2 всегда возвращает ошибку:

TS_VERIFY_CERT:certificate verify error:unable to get local issuer certificate,

Кажется, я не могу проверить свой токен с помощью файла сертификата tsa. Я получил этот файл от владельца сервера tsa, мне сказали, что это файл, в котором подписаны метки времени. Они не могут сказать мне больше, и я не могу попросить помощи, поэтому мой вопрос, почему я не могу проверить этот токен?

команда open ssl, которую я использовал для проверки:

"openssl ts -verify -digest ".escapeshellarg($hash)." -sha256 -in ".escapeshellarg($responsefile)." -CAfile ".escapeshellarg($tsa_cert_file);

-CAfile - это ключ к проблеме, я думаю, но я новичок в openssl и метках времени. В документации openssl очень мало деталей, и во многих примерах я видел только один файл для -CAfile. Может быть, моя ошибка заключается в том, чтобы передать сертификат напрямую по методу проверки?

...