php / php/php-src

check_cert() and php_openssl_store_errors do not pick up validation errors

Ouverte
#8,372 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Extension: openssl Feature
Langage dominant
C
Étoiles
40.4k
Forks
8.2k
Merge moyen
2 j 13 h
PR mergées (30 j)
96

Description

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

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez dans les composants internes de ext/openssl autour de check_cert() et php_openssl_store_errors(), puis suivez le chemin d’erreur de X509_verify_cert() décrit dans l’issue. Exécutez la reproduction PHP fournie avec a.pem ; le travail est terminé lorsque les erreurs de validation sont exposées via openssl_error_string() en plus du résultat false.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
c, php
Domaine
security
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
42/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.