Voilà une idée qui peut paraître farfelue… Mais si vous n’avez pas moyen d’avoir une connexion sécurisée pour diverses raisons (pour ma part, il s’agit d’une limitation de Google AppEngine quand on l’utilise avec un nom de domaine personnalisé).
L’idée est de pouvoir crypter des données de formulaires (mots de passe etc…) et de les transporter jusqu’au serveur de manière cryptée.
Pour cela, on utilisera un couple classique clé privée/clé publique. Les clés sont générées grâce à l’outil Keytool de java. Une fois que l’on dispose du KeyStore, il faut extraire la clé publique et la transformer en hexadécimal pour la partie client ( avec la commande suivante dans une console unix “obase=16;<la clé décimale>” | bc).
Cette clé, j’ai fait le choix de la poser en dur dans la page. On peut très bien imaginer que le serveur pose la clé dans une page dynamique.
Ensuite, j’ai utilisé les outils fournis ici : http://www-cs-students.stanford.edu/~tjw/jsbn/
Un peu de JQuery, une servlet serveur capable de décoder tout ça (je suis preneur pour un exemple en PHP et en CGI Perl ou Python ou autre…).
Sur cette servlet, j’utilise le classLoader pour charger le fichier keystore. Cette technique permet de faire fonctionner le mécanisme sur AppEngine.
Le code source de mon exemple est disponible sur GitHub.