我正在尝试完成带有时间戳的请求/验证过程的过程。
第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
的一个文件。
也许我的错误是通过证书直接采用了验证方法?