php / php/php-src

check_cert() and php_openssl_store_errors do not pick up validation errors

Offen
#8,372 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Extension: openssl Feature
Vorherrschende Sprache
C
Sterne
40.4k
Forks
8.1k
Ø Merge
2 T. 13 Std.
Gemergte PRs (30 T.)
96

Beschreibung

Description

The following code:

<?php

var_dump(openssl_x509_checkpurpose(file_get_contents('a.pem'), X509_PURPOSE_SSL_SERVER));
while ($msg = openssl_error_string())
    echo $msg . "<br />\n";"

where a.pem is

wget https://raw.githubusercontent.com/fuzyll/defcon-vm/master/extras/hfd/server.pem -O a.pem

(or any other single certificate file that won't validate; without intermediates etc)

Resulted in this output:

$ php x.php
bool(false)

But I expected this output instead:

$ php x.php
bool(false)
error: certificate chain too long (depth 0)

(or similar error message).

Why this doesn't work currently? Because X509_verify_cert() in check_cert() validation errors need to be picked up by

error = X509_STORE_CTX_get_error(csc)
X509_verify_cert_error_string(error)
X509_STORE_CTX_get_error_depth(csc)

which is not done in php ext/openssl internals.

PHP Version

PHP 8.1.4

Operating System

No response

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne in den Interna von ext/openssl rund um check_cert() und php_openssl_store_errors(), und verfolge dann den im Issue beschriebenen Fehlerpfad von X509_verify_cert(). Führe die bereitgestellte PHP-Reproduktion mit a.pem aus; die Arbeit ist abgeschlossen, wenn Validierungsfehler über openssl_error_string() neben dem false-Ergebnis offengelegt werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
c, php
Bereich
security
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
42/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.