OVH Cloud OVH Cloud

Lire le certificat SSL d'un client ?

6 réponses
Avatar
Jeremie
Bonjour,

Je souhaiterais savoir s'il est possible via PHP de parser les données
contenues dans le certificat d'un client utilisant une connexion SSL
vers mon serveur?
Je cherche en fait à attribuer une liste d'opérations selon le client
connecté, par exemple : Le client ayant le certificat X pourra effectuer
des MàJ, des suppressions alors q'un client ayant un certificat Y ne
pourra utiliser que la base en lecture seule.


Merci pour vos indications,


Jérémie

6 réponses

Avatar
xav
Bonjour,

Je souhaiterais savoir s'il est possible via PHP de parser les données
contenues dans le certificat d'un client utilisant une connexion SSL
vers mon serveur?


Merci pour vos indications,


Jérémie
Salut, avant de poser la question, a tu regardé la ?

http://fr.php.net/manual/fr/function.openssl-x509-checkpurpose.php

et en general la : http://fr.php.net/manual/fr/ref.openssl.php

A+
xav

Avatar
Jeremie
xav wrote:

Bonjour,

Je souhaiterais savoir s'il est possible via PHP de parser les données
contenues dans le certificat d'un client utilisant une connexion SSL
vers mon serveur?


Merci pour vos indications,


Jérémie
Salut, avant de poser la question, a tu regardé la ?

http://fr.php.net/manual/fr/function.openssl-x509-checkpurpose.php

et en general la : http://fr.php.net/manual/fr/ref.openssl.php

A+
xav
D'après ce que j'ai compris, ces fonctions s'utilisent sur des certificats

situés sur le serveur, mais pas chez le client. Enfin c'est ce qu'il me
semble.


Avatar
Olivier Miakinen
Le 09/01/2006 13:29, Jeremie répondait à xav :

Salut, avant de poser la question, a tu regardé la ?

http://fr.php.net/manual/fr/function.openssl-x509-checkpurpose.php

et en general la : http://fr.php.net/manual/fr/ref.openssl.php


D'après ce que j'ai compris, ces fonctions s'utilisent sur des certificats
situés sur le serveur, mais pas chez le client. Enfin c'est ce qu'il me
semble.


Il te semble bien, mais tu peux étendre ta connaissance à la totalité
de PHP. Voir <http://faqfclphp.free.fr/#rub2.3>. Si donc tu veux faire
quelque chose côté client et pas côté serveur, tu t'es trompé de groupe
(voir <news:fr.comp.lang.javascript> par exemple).

--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)



Avatar
Jeremie
Olivier Miakinen wrote:

Le 09/01/2006 13:29, Jeremie répondait à xav :

Salut, avant de poser la question, a tu regardé la ?

http://fr.php.net/manual/fr/function.openssl-x509-checkpurpose.php

et en general la : http://fr.php.net/manual/fr/ref.openssl.php


D'après ce que j'ai compris, ces fonctions s'utilisent sur des
certificats
situés sur le serveur, mais pas chez le client. Enfin c'est ce qu'il me
semble.


Il te semble bien, mais tu peux étendre ta connaissance à la totalité
de PHP. Voir <http://faqfclphp.free.fr/#rub2.3>. Si donc tu veux faire
quelque chose côté client et pas côté serveur, tu t'es trompé de groupe
(voir <news:fr.comp.lang.javascript> par exemple).



Je me disais simplement que quelque part (logs ?) était garder une trace, du
certificat et que PHP pouvait le lire. Pour le fonctionnement général de
PHP, merci je connais ;-).




Avatar
xav
xav wrote:

Salut, avant de poser la question, a tu regardé la ?
http://fr.php.net/manual/fr/function.openssl-x509-checkpurpose.php

D'après ce que j'ai compris, ces fonctions s'utilisent sur des certificats

situés sur le serveur, mais pas chez le client. Enfin c'est ce qu'il me
semble.


Salut,

A priori, openssl_x509_read() permet de lire n'importe quel certificat
qu'on lui passe en argument, maintenant la question est de savoir si
dans l'environnement du serveur, tu a acces aux données du certificat
SSL qu'a envoyé le client.

moi si je fais un phpinfo() sur mon serveur ssl, en lui envoyant un
certificat client valide, j'ai acces a une variable nommée:

$_SERVER["SSL_CLIENT_CERT"]


Si je passe cette variable a openssl_x509_read(), ca roule, je peut
ensuite le parser sans soucis.

example fonctionnel basique:

<?php

if (!isset($_SERVER['SSL_CLIENT_CERT'])){

die('aucun certf client trouvé');
}

$certDatas = $_SERVER['SSL_CLIENT_CERT'];
$cert = openssl_x509_read($certDatas);

$viewCert = openssl_x509_parse($cert);

echo '<pre>';
print_r($viewCert);
echo '</pre>';

?>

A +
xavier


Avatar
w00t
Bonjour

Je souhaiterais savoir s'il est possible via PHP de parser les données
contenues dans le certificat d'un client utilisant une connexion SSL
vers mon serveur?


Google: "certificat client"+php
=>
http://www.chambersign.fr/telechargement/fichiers/ControleAccesCertificat.pdf

Ce document fait référence à la variable globale $SSL_CLIENT_CN,
donc re-Google ..
=> http://www.modssl.org/docs/2.8/ssl_compat.html

Doc du module SSL d'Apache, on y trouve des variables au nom sympatoche
comme "SSL_CLIENT_CERT" ... ensuite, à toi de pondre un parser en
conséquence (en utilisant les fonctions x509_ et openssl_). Ca répond
à ta question ?

W.