1.0.1f 在 Ubuntu 14.04 上运行 Openssl 验证命令时收到错误 6 Jan 2014.错误与错误字符串time stamp routines:TS_CHECK_SIGNING_CERTS:ess signing certificate error
0x2F067065
。
时间戳提供程序怀疑这是一个Openssl错误。Openssl 正忙于新版本,并且对此问题的低优先级没有响应。
这个错误是什么,我该如何解决?有人可以帮忙吗?
这是发生错误的时候:
openssl ts -verify -digest e16db7d30581e44a5540f19553852b5a4e4e26f9adc365cc846f94038ee33025
-in /tmp/namirial.tsr -CAfile /tmp/NamirialCATSA.pem
Verification: FAILED
140236013643424:error:2F067065:time stamp routines:TS_CHECK_SIGNING_CERTS:ess signing
certificate error:ts_rsp_verify.c:291:
如有必要,我有一个完整的复制场景,我可以私下发送。误差是系统性的和稳定的。
这是我调用openssl库来执行验证的PHP代码,有关如何找到类似库的任何帮助(因为这似乎是Openssl中的一个错误,因此我需要使用另一个库)以及如何在Ubuntu中从PHP调用它?
public static function validate ($hash, $base64_response_string, $response_time, $tsa_cert_file)
{
//if (strlen($hash) !== 40)
//if (strlen($hash) !== 64) // sha256
//throw new Exception("Invalid Hash");
$binary_response_string = base64_decode($base64_response_string);
if (!strlen($binary_response_string))
throw new Exception("There was no response-string");
if (!intval($response_time))
throw new Exception("There is no valid response-time given");
if (!file_exists($tsa_cert_file))
throw new Exception("The TSA-Certificate could not be found");
$responsefile = self::createTempFile($binary_response_string);
$cmd = "openssl ts -verify -digest ".escapeshellarg($hash)." -in ".escapeshellarg($responsefile)." -CAfile ".escapeshellarg($tsa_cert_file);
$retarray = array();
exec($cmd." 2>&1", $retarray, $retcode);
if(unlink($responsefile)) {
If ($debugMN) {echo " File Deleted Tempfile in validate"; }
}
/*
* just 2 "normal" cases:
* 1) Everything okay -> retcode 0 + retarray[0] == "Verification: OK"
* 2) Hash is wrong -> retcode 1 + strpos(retarray[somewhere], "message imprint mismatch") !== false
*
* every other case (Certificate not found / invalid / openssl is not installed / ts command not known)
* are being handled the same way -> retcode 1 + any retarray NOT containing "message imprint mismatch"
*/
if ($retcode === 0 && strtolower(trim($retarray[0])) == "verification: ok")
{
if (self::getTimestampFromAnswer ($binary_response_string) != $response_time)
throw new Exception("The responsetime of the request was changed");
return true;
}
foreach ($retarray as $retline)
{
if (stripos($retline, "message imprint mismatch") !== false)
return false;
}
throw new Exception("Systemcommand failed: ".implode(", ", $retarray));
}
提前谢谢你
你没有问任何问题,所以这里没有什么可回答的,但无论哪种方式,我都会尝试在你的黑暗中亮一些光明:)
您的提供商很可能在 TS 响应中添加了一些属性证书 - 我猜他正在使用启用了 TAC 的 DSE200,只是其他人可能会看到类似的问题 - 而 OpenSSL 目前不支持此类场景。您可以从openssl-users邮件列表中查看此旧线程,其中已详细讨论了此问题。