Ошибка 0x2F067065 в ts_rsp_verify.c:291

Я получаю сообщение об ошибке при запуске команды проверки Openssl в Ubuntu 14.04 с Openssl 1.0.1f 6 января 2014 года. Ошибка 0x2F067065 со строкой ошибки time stamp routines:TS_CHECK_SIGNING_CERTS:ess signing certificate error,

Поставщик меток времени подозревает, что это ошибка 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:

При необходимости у меня есть полный сценарий воспроизведения, который я могу отправить в частном порядке. Ошибка систематическая и стабильная.

Это код PHP, где я вызываю библиотеку openssl для выполнения проверки, любую помощь в том, как найти подобную библиотеку (так как кажется, что это ошибка в Openssl, поэтому мне нужно использовать другую библиотеку) и как вызвать ее из 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));
}

заранее спасибо

1 ответ

Вы не задавали никаких вопросов, поэтому здесь нечего ответить, но в любом случае я постараюсь пролить свет на вашу темноту:)

Ваш провайдер, скорее всего, добавляет сертификат атрибута в ответы TS - я думаю, он использует DSE200 с включенным TAC, вероятно, все остальные видят подобные проблемы - и OpenSSL в настоящее время не поддерживает такие сценарии. Вы можете взглянуть на эту старую ветку в списке рассылки openssl-users, где эта проблема подробно обсуждалась.

Другие вопросы по тегам