EID pour site web. Application PHP

931 views
Skip to first unread message

Quentin Gosset

unread,
Feb 18, 2014, 12:47:13 PM2/18/14
to eid-middl...@googlegroups.com
Bonsoir, j'envoie ce messages pour demander si il existe une possibilités pour développer une application de lecteur de EID en PHP.
Enfaîte, je développe un site et j'aimerais utiliser la carte d'identité pour s'inscrire/se connectée/certifier un compte. 
Et-il possible de réaliser cela ? si oui, existe t'il des librairie ?

Merci

Frank Marien

unread,
Feb 18, 2014, 1:56:41 PM2/18/14
to eid-middl...@googlegroups.com
Bonsoir Quentin,

Indépendemment de la technologie utilisée côté serveur, il faut
forcémment du code côté client pour lire
la carte eID: Les browser n'exposent pas (encore?) l'accès PCSC aux
pages web/javascript.

Cela dit: Il existe des moyens (livrés dans le MiddleWare eID) qui
permettent au browser d'accédér aux fonctions
signature de la carte. Cela permet de monter une session Mutual SSL avec
un serveur https configuré pour cela.

(comme tax-on-web)

Tu pourrait opérer ainsi: Le serveur HTTPS configuré pour accepter les
certificats signés par un des Belgian Root CA,
soite mettre des règles dans le serveur HTTPS pour limiter a certaines
personnes, soit lire le DN du certificat
(disponible en variables d'environnement) a partir de ton code PHP et
décider ainsi authentication et authorisation:
Si le certificat présenté est signé correctement, et n'est pas revoqué
(utiliser serveur OCSP), le DN sera bien celui
du citoyen en question, en le fait que le browser ai pu signer avec la
clef privée du citoyen signifie que celui-ci
a entré son code PIN correctement.

Moi, par exemple, je fait ainsi dans une certaine application de test
(extrait config apache httpd)

# faire confiance a ce qui est signé par un des BRCA
SSLCACertificateFile "/etc/httpd/conf/ssl/belgianroots.pem"

# verifier la chaine (auth, citizen CA, BRCA)
SSLVerifyDepth 4

# mettre a disposition les paramètres de la connection SSL

SSLOptions +StdEnvVars

# suggérer, mais pas insister sur une connection Mutual SSL (ainsi, les
clients sans eID peuvent accédér la page,
# mais les variables indiqueront que la session n'est pas "Verified" et
les données comme DN seront vides.
# te permettant de former un message plus poli que l'erreur cryptique du
browser.)
SSLVerifyClient optional

# passer les variables qui m'intéressent en forme de Header HTTP
(j'utilise une application HTTP en mode ProxyPass)
# pour toi, voir doc PHP comment accéder a ceux-ci.

RequestHeader set Verified "%{SSL_CLIENT_VERIFY}s"

RequestHeader set DN "%{SSL_CLIENT_S_DN}s"

Dépendent de tes besoin et risques, il serait une bonne idée d'enabler
la recherche OCSP dans ton serveur pour
refuser les cartes perdues en volées.

Autre utilisation, comme par example lire les fichiers "identité" et/ou
"addresse" requièrent le deployement de code
côté client. Il existe, par exemple, une Applet Java qui fait cela (et
bien d'autre choses). Faut voir si cela est acceptable
pour ton application (tes utilisateurs devraient avoir Java installé et
admettre l'execution d'Applet. Ton Applet devra être
signé avec un codesigning certificate).

https://code.google.com/p/eid-applet/

Tu pourrais écrir ton Applet propre, par example en utilisant la lib
commons-eid:

https://code.google.com/p/commons-eid


public void eIDCardInserted(CardTerminal terminal,BeIDCard card)
{
try
{
this.clearText();

this.identity=TlvParser.parse(card.readFile(FileType.Identity),
Identity.class);
String
firstName=this.identity.getFirstName().split(" ")[0];
addText("Ha, kijk eens daar.." +
((this.identity.getGender().equals(Gender.MALE))?"Onze ":"Ons ") +
firstName + " zie!");
this.address =
TlvParser.parse(card.readFile(FileType.Address), Address.class);
int
yob=this.identity.getDateOfBirth().get(Calendar.YEAR);
int age=(new
GregorianCalendar()).get(Calendar.YEAR)-yob;
addText("Alle da'k u op uw " + age + "ste pas
terugzie!");
Thread.sleep(1000);
addText("T'is toch straf! Hoe lang is dat niet
geleden zeg!");
Thread.sleep(1000);
addText("Hoe is't nog in " +
address.getMunicipality() + "?");
}
catch(CardException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch(IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch(InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void eIDCardRemoved(CardTerminal terminal,BeIDCard card)
{
addText("Sa-luuu!");
try
{
Thread.sleep(1000);
}
catch(InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
clearText();
}

Dépendant de tes besoins, risques et investissements, il y a peut-être
raison de deployer une instance du Trust Service:

https://code.google.com/p/eid-trust-service/

.. et d'y acceder en XKMS2..

Quoi que tu fasse.. fait attention de toujours suivre/consulter la
commission sur la vie privé!

http://www.privacycommission.be/fr

Sinceres,

-f
> --
> You received this message because you are subscribed to the Google
> Groups "eID Middleware Dev" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to eid-middleware-...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.

Frank Marien

unread,
Feb 18, 2014, 2:25:25 PM2/18/14
to eid-middl...@googlegroups.com
Erratum:

je voulais dire "eid-idp", pas "eid-trust-service".

-f

Quentin Gosset

unread,
Feb 18, 2014, 3:07:42 PM2/18/14
to eid-middl...@googlegroups.com
Ok je regarderais et me renseignerais, à ce que j'ai vus, je croit préférer le coté applet java a installer chez le clients. Car il permet de récupérer les information et les ajouter en BDD ce que je cherche justement pour mon système inscription/connexion/validation.

:) Merci


Quentin Gosset

unread,
Feb 21, 2014, 6:40:04 PM2/21/14
to eid-middl...@googlegroups.com
Je croit que je vais abandonner, trop compliquer de passer par des module etc etc

Frank Marien

unread,
Feb 21, 2014, 8:31:46 PM2/21/14
to eid-middl...@googlegroups.com
Quentin,

Si on peut aider, passe-nous des problèmes concrèts stp. Mais surtout,
va dormir et regardes cela après une nuit de sommeil (+ un week-end?)
Il y a beaucoup de petit facteurs à réunir pour faire fonctionner.
Aucun vraiment très dur (d'accord, la crypto, mais c'est bien réglé dans
les libs),
mais nombreux, et en mode chainon-faible ce qui fait que quand cela ne
fonctionne pas il
y a toujours 50 suspects. Apache + qqs lignes de config est un bon début.
Si tu veut, je te passes ma config vhost entière? Et ke veut bien
essayer un coup en
PHP mais qq tu as besoin au juste?

à 00:40 un vendredi soir, j'abandonnerai aussi :_)

Bonne nuit!

-f



On 02/22/14 00:40, Quentin Gosset wrote:
> Je croit que je vais abandonner, trop compliquer de passer par des
> module etc etc
Message has been deleted
Message has been deleted

Quentin Gosset

unread,
Feb 22, 2014, 10:28:27 PM2/22/14
to eid-middl...@googlegroups.com
Rebonsoir :) 
Pour annoncer que ..... j'ai reussi ! :p mais j'ai toujours quelque problème :/
Tout est correct, mais lorsque je essaye de mettre ma webapp sur mon serveur online, Java me dis qu'il bloque l'application à cause des paramètre de sécurité :/
une idée pour se problème ?

Frank Marien

unread,
Feb 23, 2014, 2:45:40 AM2/23/14
to eid-middl...@googlegroups.com
Bon.. Jour! Quentin,

Il faut que l'Applet soit signe avec un codesigning dont le root est
dans la liste des root te confiance dans le browser,
*et* (depuis cette année) contenant un attribut indiquant d'ou il peut
tourner:

http://download.java.net/jdk8/docs/technotes/guides/jweb/security/manifest.html

Dans les Applet signés par FedICT, cet attribut est

"*.be localhost"

https://code.google.com/p/eid-applet/source/diff?spec=svn796&r=796&format=side&path=/trunk/eid-applet-package/pom.xml

donc, l'Applet signé par FedICT devrait fonctionner sour tout site .be
et dur localhost, pour les developpeurs..

Autrement, tu devras builder et signer toi-même l'Applet.

-f

Quentin Gosset

unread,
Feb 23, 2014, 10:41:16 AM2/23/14
to eid-middl...@googlegroups.com
Perso mes site son en .com/.fr/.be donc sinon j peut signer les .jar sa ira aussi vite non ?

Frank Marien

unread,
Feb 23, 2014, 10:47:32 AM2/23/14
to eid-middl...@googlegroups.com
probablement, tu pourrais re-signer le jar apres avoir ajouté tes URL au
manifest.
Mais essaye sur une URL .be pour 't assurer que c'est vraiment ça le
problème.



On 02/23/14 16:41, Quentin Gosset wrote:
> Perso mes site son en .com/.fr/.be donc sinon j peut signer les .jar
> sa ira aussi vite non ?

Quentin Gosset

unread,
Feb 23, 2014, 10:53:25 AM2/23/14
to eid-middl...@googlegroups.com
Parcontre je viens de signer les .JAR et quand je les balance sur mon site, je n'ai plus d'erreur de sécurité mais je recoit une "ClassNotFoundException : be.fedict.eid.Applet.class"

C'est mon signer qui merde ?

Quentin Gosset

unread,
Feb 23, 2014, 12:05:34 PM2/23/14
to eid-middl...@googlegroups.com
le problème viens bien de la signature :/ car en localhost, cela fonctionne avec les .jar du sdk

Frank Marien

unread,
Feb 23, 2014, 12:42:39 PM2/23/14
to eid-middl...@googlegroups.com
est-ce que ton signer remplace le manifest?
unzip ton jar après signature et compare avec celui de FedICT?

On 02/23/14 18:05, Quentin Gosset wrote:
> le problème viens bien de la signature :/ car en localhost, cela
> fonctionne avec les .jar du sdk

Quentin Gosset

unread,
Feb 23, 2014, 12:47:27 PM2/23/14
to eid-middl...@googlegroups.com, fr...@apsu.be
Ooutch alors la ! je ne c'est pas comment faire pour voir les différence. Sinon n'y a t'il pas moyen de discuter sur skype pour avoir plus facile ?

Frank Marien

unread,
Feb 23, 2014, 3:08:18 PM2/23/14
to eid-middl...@googlegroups.com
Tu unzip eid-applet-package-1.1.3.jar

a la racine, tu trouveras une dir META-INF contenant MANIFEST.MF:

Manifest-Version: 1.0
Build-Jdk: 1.6.0_45
Built-By: fcorneli
Permissions: all-permissions
Created-By: Apache Maven
Codebase: https://*.be localhost 127.0.0.1
Archiver-Version: Plexus Archiver

Name: be/fedict/eid/applet/Dialogs$DialogResult.class
SHA1-Digest: ImIbB+KcO8ViE7xO6YIcI4m8BdY=

Name: be/fedict/eid/applet/Controller$12.class
SHA1-Digest: EU88Z8mq+fPBz59j+6IvNL3gKIc=

Name: be/fedict/eid/applet/Applet$1.class
SHA1-Digest: cg1P+GHmj8CN99NvU72S7lMfbC0=

... etc.. etc..


Est-ce que "Codebase" et "Permissions" sont bien remplis?

-f

Quentin Gosset

unread,
Feb 23, 2014, 3:20:33 PM2/23/14
to eid-middl...@googlegroups.com
Oui, il sont bien là :/

Frank Marien

unread,
Feb 23, 2014, 3:28:16 PM2/23/14
to eid-middl...@googlegroups.com
Il n'y a pas une "raison" a cette exception? Que retournes getCause()?
Car j'observe que Oracle a étendu les directives du manifest avec des
'd'ou peut-je charger les libs' etc..
Regardes aussi avec e.g. WireShark ce q'essayes detélécharger la JVM sur
le réseau.

Tu ne dors donc jamais, toi?

-f



On 02/23/14 21:20, Quentin Gosset wrote:
> Oui, il sont bien là :/

Quentin Gosset

unread,
Feb 23, 2014, 3:32:30 PM2/23/14
to eid-middl...@googlegroups.com
En attendant de résoudre le problème, je me suis pencher sur le système de authentification et non l'identification mais je suis bloquer à un endroit.
Lorsque l'on me dis ceci :

<init-param>
 <param-name>AuthenticationService</param-name>
 <param-value>your/location/in/jndi/AuthenticationServiceBean</param-value>
</init-param>

Le  "your/location/in/jndi/AuthenticationServiceBean" je suppose que je doit installer JNDI ou c'est déjà la quand on install java ?

Frank Marien

unread,
Feb 23, 2014, 3:40:45 PM2/23/14
to eid-middl...@googlegroups.com
l'Applet présuppose la présence de ses services côté serveur.
C'est pour cela que j'avais propośe de faire ta propre Applet, pour ne
parler qu'a PHP
en backend, t'évitant de devoir maintenir un Appserver J2EE.

JNDI est inclus, mais l'AuthenticationService n'apparait pas magiquement
de la même façon..

Temps de passer la question a eid-applet, je crois.

-f

Quentin Gosset

unread,
Feb 23, 2014, 3:45:53 PM2/23/14
to eid-middl...@googlegroups.com
Ha je n'avais pas compris que tu été d'accord de faire mon applet :/
Si tu est toujours d'accord, je suis preneur . Tien moi au courant :)

Frank Marien

unread,
Feb 23, 2014, 3:52:40 PM2/23/14
to eid-middl...@googlegroups.com
Haha.
Malentendu: je voulais dire: utilises commons-eid, pour facilement faire
un Applet, toi, a ton gout..

A demain..

-f


On 02/23/14 21:45, Quentin Gosset wrote:
> Ha je n'avais pas compris que tu été d'accord de faire mon applet :/
> Si tu est toujours d'accord, je suis preneur . Tien moi au courant :)

Quentin Gosset

unread,
Feb 23, 2014, 4:27:52 PM2/23/14
to eid-middl...@googlegroups.com
Le problème, c'est que jai besoin d'une applet qui permet de se connectée via l'EID et qui demande un code pin pour prouver que l'user est bien celui que l'on croit. un peut de se genre la :

Mais quand je suis la doc développeur, il sont bien marrant car il montre l'exemple pour un truc basic, mais quand on a besoin de plus dure, impossible de reussir ...
resultat je bug au point 3.2 ou il dise de faire ceci :

<servlet>
        <servlet-name>AuthenticationService</servlet-name>
        <servlet-class>be.fedict.eid.applet.service.AppletServiceServlet</servlet-class>
        <init-param>
            <param-name>AuthenticationService</param-name>
            <param-value>your/location/in/jndi/AuthenticationServiceBean</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>AuthenticationService</servlet-name>
    </servlet-mapping>

Je sais pas mettre quoi comme localisation .

Donc en suivant jusque là, obtient au grand max ceci dans mon 
WEB.XML :
<servlet>
        <servlet-name>AuthenticationService</servlet-name>
        <servlet-class>be.fedict.eid.applet.service.AppletServiceServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>AuthenticationService</servlet-name>
    </servlet-mapping>

après j'ai essayer de checker la suite, mais je comprend toujours rien.... je croit que je creuse de plus en plus vers le fond.

 

 

Quentin Gosset

unread,
Feb 26, 2014, 6:34:10 AM2/26/14
to eid-middl...@googlegroups.com
une idée pour pouvoir faire sa ?


Quentin Gosset

unread,
Mar 2, 2014, 5:11:26 PM3/2/14
to eid-middl...@googlegroups.com

Une personne aurais une idée pour m'aider ?

Frank Marien

unread,
Mar 3, 2014, 10:40:05 AM3/3/14
to eid-middl...@googlegroups.com
J'ai expérimenté un adaptateur Java/Javascript pour commons-eid.
C'est dans un stade très expérimental.. mais si tu m'expliques ton use
case..
Cela aiderait a le developper tout de suite avec max d'utilité.

Ouvre

https://apsu.be/applet.html

dans un browser qui offre l'object console en JS. (par example, Firefox
avec Firebug et Console enabled, ou "Shift-Ctrl-J" en Chrom(e|ium).

Approuve l'execution de l'applet java..

maintenant, chaque fois que tu inseres une eID, tu devrais voir 3
objects JS logges dans la console:

Object {
dateofbirth: "19700926"
documenttype: "BELGIAN_CITIZEN"
firstname: "Frank Paul"
gender: "MALE"
middlename: "B"
name: "Marien"
nationality: "Belg"
nationalnumber: "70092605924"
placeofbirth: "Mechelen"
}

Object {
municipality: "Maville", streetandnumber: "Monaddresse NN /A000", zip:
"1234"
}

Object {
cardnumber: "591149671395"
chipnumber: "534C494E33660013930D2061C018063F"
deliverymunicipality: "Liedekerke"
duplicate: "null"
validfrom: "20100823"
validuntil: "20150823"
}


Une fois que tu as les données en JS, simple de les envoyer a ton code
PHP en AJAX..

Mais cela aiderai si tu expliqait exactement ce qu'il te faut..

Ce genre de donnees? (valides ou pas - quelles sont les consequences du
qqn qui envoies des donnees fausses?)

simplement une session securisee https:// ou l'utilisateur est
certainement celui qu'il dit etre..?

Attention: Cette applet est experimentale.. Tu est responsable de suivre
les directives de la http://www.privacycommission.be/fr.. pour ton
application,
pas moi. Par example, faut demander l'authorisation au user..
l'adaptateur fera cela par defaut.

-f




On 03/02/14 23:11, Quentin Gosset wrote:
>
> Une personne aurais une idée pour m'aider ?

Quentin Gosset

unread,
Mar 3, 2014, 7:24:05 PM3/3/14
to eid-middl...@googlegroups.com
Ok je checkerais ton lien qui à l'air pas mal dès que j'ai du temps :/

Enfaîte mon application servirais pour 2 choses principal :

Principalement, ce que j'aimerais faire assez rapidement, serrais pour un accès administrateur. Le principe est que pour accéder au panel d'administrateur, la personnes qui a accès à cette fonction doit le prouver en se connectant avec sa carte d'identité. Si la carte d'identité existe bien dans la Base de donnée cette personne à accès sinon elle est refusée.

Secondement, sachant qu'une lois Européenne à déclarer que dans quelque temps la carte européenne "EID"  serrais obligatoire partout, je voudrais me pencher sur l'inscription/connexion/signature d'achat  à mon site web via la carte d'identité.

Voilà mon utilisation principal :) mais actuellement comme je le dis, cette options serra utiliser que par moi même donc niveau condition privée je les prend à ma charges ^^

Frank Marien

unread,
Mar 3, 2014, 7:53:37 PM3/3/14
to eid-middl...@googlegroups.com
Okay, merci..

Pour l'accès admin, je suggère réfléchir a la question suivante:

- le nombre d'utilisateurs
- est-ce que tu contrôles/connaît leur config client (pas exemple,
est-ce que tu peut exiger l'install du Middleware eID?)
- quelles seraient les conséquences d'un admin qui se fait voler sa
carde eID, et le voleur se logge en admin?

J'essaye de comprendre ce qui est en jeu, car la securité est toujours
relative, dans mes yeux.
Il est facile, pas example, de configurer un serveur Apache pour exiger
une session "Mutual SSL"
et de lui apprendre de ne faire confiance qu'aux certificats signès pas
le gouvernement.
Il te resterait, dans ton PHP, qu'a tester contre les identités que tu
accepte en tant qu'admin, et qui te sont
présentés en tant que variables d'environnement par Apache.

Mais: chaque utilisateur serait alors obligé de disposer du Middleware
eID. Si la carte est perdue ou volée, l'utilisateur a bien aller voir la
police locale pour faire révoquer ces certificats, ton application ne
saurait pas.. Tu pourrais utiliser le service OCSP, mais alors tu
dépends de lui pour fonctionner, *et* le service est au courant de
chaque utilisation (privacy)..

Tu pourrais déléguer a un service IDP, que te fait le test complèt selon
toutes les Best Practice, mais tes utilisateurs
devraient avoir Java installé, et toi tu devra soit tourner ta propre
instance d'IDP (dispo que en Java), soit utiliser l'IDP du gouvernement,
mais celui-la n'est pas garanti d'être disponible, donc si au jour X on
décide de le supprimer, tu n'aurais aucun recours.

Décisions, tant de décisions..

Pour


"l'inscription/connexion/signature d'achat"

je présume que "inscription" implique lecture des données d' identité?
"connexion" est comme ci-haut?
"signature 'd achat implique une forme de non-répudiation?

-f

Frank Cornelis

unread,
Mar 3, 2014, 11:22:27 PM3/3/14
to Quentin Gosset, eid-middl...@googlegroups.com
Hi Quentin,


The easiest and safest way to use the eID from within your PHP based web
application is via the eID IdP.

Two possible ways to integrate within your PHP web application:
http://code.google.com/p/eid-idp/wiki/LightOpenID
http://code.google.com/p/eid-idp/wiki/SimpleSAMLphp


Kind Regards,
Frank.

Quentin Gosset

unread,
Mar 5, 2014, 2:11:10 PM3/5/14
to eid-middl...@googlegroups.com, fr...@apsu.be
Oui, c'est vrai qu'il faut réfléchir à tous ses point. niveau admin, je me penche plus sur le fait que les accès seront donné à des personne de confiance et il devrons se log avec leur carte pour la simple raison, que l'utilisation d'un compte "normal" si ma BDD se fait dump et bien le hacker peut se connecter or avec le système Eid pour se connecté il faut obligatoirement la carte donc sois :

-être la personne principal
-Sois être un voleur qui a réussi à tabasser la personne pour avoir son code pin ^^

Après pour ce qui est connexion général, je me penche sur le fait que les utilisateur devrons installer Java obligatoirement si il désire passer par cette méthode qui ne serra pas obligatoire, on pourras toujours se connectée avec un compte normal.

Pour le système d'achat/signature, oui cela engendre une non-répudiation car cela servira à prouver que la personne qui achète un service, prouve qu'il l'à acheter à son nom et qu'il a à accepter toutes les conditions pour l'utilisation du service acheter.

Mais bon actuellement, j'ai encore le temps de réfléchir et de bien voir si l'Eid servira ou non, mais sur le site que je développe vus que cela serra un nouveau concept, je préfère faire le maximum de sécurité.


Reply all
Reply to author
Forward
0 new messages